- 2024-10-17Arraylist集合实现以及代码解读
原理主要把插入后的元素向后移动一位package集合框架.Arraylist;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Objects;importjava.util.Queue;/***如果传入参数执行有参构造方法,进行判断如果intsize等于0那么说明数组为空数组如果大于0那么此
- 2024-09-23JavaSE---Fail-Fast
总结主要用于集合类中,以确保在遍历集合时如果集合本身被修改,则会立即抛出ConcurrentModificationException异常。原理内部计数器:每个集合对象都有一个内部计数器,称为modCount(modificationcount)。每当集合结构被修改(比如添加或删除元素),这个计数器就会增加。迭代器检查:当
- 2024-09-16ArrayList 源码解析
ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量capac
- 2024-09-16Arraylist源码分析:如何实现一次add操作?
注意:这里是JDK17,和JDK8略微有所不同成员变量 add操作:0.(初始化,常用)在初始化newArrayList的时候,会给elementData赋一个有区别的空列表,以便下面使用。 1.将指定元素添加至队尾,返回一个布尔值 2.add的抽离方法,当size和elementData.length一样大的时候就该需要扩容了,
- 2024-09-06Array List与顺序表
学习目标线性表顺序表与链表的简单了解ArrayList的介绍ArrayList的扩容机制 线性表线性表(linearlist):是由n且具有相同的特性数据元素的有限列表,线性表在实际运用中常见的数据结构,常见的线性表:栈,堆,队列,顺序表,链表…链表:在逻辑上是连续的数据结
- 2024-08-30JAVA集合的扩容机制
ArrayListList<Integer>list =newArrayList<>();不指定初始长度,默认刚开始赋值{}空集合,当add时,初始长度为10。//初始容量privatestaticfinalintDEFAULT_CAPACITY=10;//空数组privatestaticfinalObject[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA={};当超
- 2024-08-28ArrayList与顺序表
1.线性表 线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列.. 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是
- 2024-08-23ArrayList动态扩容机制(长度可变原理)
ArrayList底层是数组结构的,数组的默认长度为10。当数组添加满了后,会自动扩容为1.5倍。原理讲解:1.用空参构造函数创建ArrayList集合容器。测试代码:publicclassArrayListDemo{publicstaticvoidmain(String[]args){//创建ArrayList集合容器
- 2024-08-15【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
ArrayList(JDK8)ArrayList有四个内部类,成员内部类Itr,成员内部类ListItr,静态内部类SubList,ArrayListSpliterator(暂时用不到)Itr是Iterator的实现类,支持正向遍历,ArrayList的iterator方法返回一个Itr对象ListItr是ListIterator的实现类,支持双向遍历,ArrayList的listIterator方法
- 2024-07-21ArrayList【源码解析】
showDiagram 从上图可以看出我们的老朋友ArrayList实现了Cloneable、RandomAccess、Serializable3个接口,并且继承了AbstractList抽象类。1.Cloneable Cloneable接口是Java中的一个标记接口,它没有任何方法定义,只是作为一个标志,表示实现
- 2024-07-21[Java基础]ArrayList
ArrayListArrayList是List接口的实现类,它是支持根据需要而动态增长的数组。java中标准数组是定长的,在数组被创建之后,它们不能被加长或缩短。这就意味着在创建数组时需要知道数组的所需长度,但有时我们需要动态程序中获取数组长度。ArrayList就是为此而生的,但是它不是线程安全的,外
- 2024-07-122-ArrayList底层结构和源码分析
2-ArrayList底层结构和源码分析介绍汇总:ArrayList的注意事项ArrayList的运行重要步骤补充1-ArrayList的注意事项ArrayList允许添加所有的元素,包括null,而且还可以多个null。ArrayList是由数组来实现数据存储的。ArrayList基本等同于Vector,除了ArrayList是线
- 2024-07-05ArrayList底层结构和源码分析
//无参构造器创建ArrayList对象//ArrayListlist=newArrayList();//断点1ArrayListlist=newArrayList(8);//断点2//添加1-10数据for(inti=0;i<=10;i++){list.add(i);}//添
- 2024-07-03Vector底层结构和代码解析
基本介绍定义说明publicclassVector<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.io.Serializable{Vector底层是一个对象数组,protectedObject[]elementData;Vector是线程同步的(线程安全),Vector类的操作方法带有synchronized
- 2024-06-02集合类源码浅析のArrayList
源码分析路线图:初级部分:ArrayList->LinkedList->Vector->HashMap(红黑树数据结构,如何翻转,变色,手写红黑树)->ConcurrentHashMap中级部分:Spring->SpringMVC->SpringBoot->Mybatis核心类源码高级部分:中间件源码(有生之年系列)第一篇,从最简单的ArrayList入手分析1、成员变量
- 2024-06-02stack源码阅读
javaStackstack是一个后进先出的数据结构,继承于vector,自身提供了五种方法,pop、push、empty、peek、search本文主要介绍pop将一个元素入栈push将一个元素出栈packagejava.util;/***The{@codeStack}classrepresentsalast-in-first-out*(LIFO)
- 2024-04-26JDK源码分析-Vector
概述Vector是Java集合中线程安全的动态数组,它也可以根据需要进行扩容和缩容,与ArrayList类似。但有一个重要的区别,Vector是同步的,也就是它的操作是线程安全的,在某些特定场景下是可以保证线程安全的,但同时也会带来性能损耗,因此在单线程环境通常还是推荐使用ArrayList。类图
- 2024-04-24JDK源码分析-ArrayList
概述ArrayList是List接口的一个实现类,也是Java中最常用的容器实现类之一,可以把它理解为「可变数组」。Java中的数组初始化时需要指定长度,而且指定后不能改变。ArrayList内部也是一个数组,它对数组的功能做了增强:主要是在容器内元素增加时可以动态扩容,这也是ArrayList的
- 2024-03-24Day25 迭代器之Iterator底层
Day25迭代器之Iterator底层一、迭代器1、概念:迭代器(Iterator)是一种用于遍历集合(Collection)元素的接口,它提供了统一的方式来访问集合中的元素,而不暴露集合的内部结构。通过迭代器,我们可以依次访问集合中的每个元素,进行遍历和操作。2、使用步骤:获取集合的迭代器:Iterat