ArrayList不是线程安全的,其底层是通过Object[] 数组实现的。
ArrayList源码分析记录

首先ArrayList继承了AbstractList类,实现了List接口
ArrayList的源码解读

1.属性
ArrayList的源码解读ArrayList的源码解读
DEFAULT_CAPACITY 默认初始的容量的大小,默认为10
EMPTY_ELEMENTDATA 用于共享的空数组实例
DEFAULTCAPACITY_EMPTY_ELEMENTDATA 默认大小空数组实例,知道第一个元素核实被添加
elementData 数组缓存对象数组,当elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA时,第一个元素被添加时将会扩展默认大小的数组(该属性没有被初始化的原因就是,简化嵌套类访问)
size 这个表示数组中拥有对象的个数
ArrayList的源码解读
静态成员变量,当ArrayList的实例尝试扩展时,超过这个值的话,可能会导致OutOfMemoryError

2.构造方法

ArrayList的源码解读
构造一个初始容量是initalCapactity的一个数组
ArrayList的源码解读
构造默认大小是空的数组,初始容量是10

ArrayList的源码解读
构造一个包含指定元素的列表,元素顺序和列表迭代的顺序是一致的,

3.方法
ArrayList的源码解读
将该实例当前列表容量大小的实例,应用程序可以操作最小化存储
ArrayList的源码解读
Size获取集合中元素的个数,isEmpty判断集合中的额元素是否为空
ArrayList的源码解读
IndexOf通过遍历数组,获取元素对象的下标,如果对象不存在则返回-1;
Contains判断元素是否存在
ArrayList的源码解读
获取元素最后一次出现的下标,不存在返回-1
ArrayList的源码解读
返回指定索引位置的元素,rangeCheck()方法是判断,该下标是否越界,越界的话则会抛出一个数组越界异常IndexOutOfBoundsException
ArrayList的源码解读
ArrayList的源码解读
添加元素,和在指定位置添加元素,rangeCheckForAdd()是判断元素插入的位置,是否越过数组的界限,越界的话会抛出IndexOutOfBoundsException
ArrayList的源码解读

在添加的元素时,判断数组是否需要扩容,当size+1大于elementData的length时,则数组会扩容,
ArrayList的源码解读ArrayList的源码解读
这是数组的扩容机制,当扩容容量的大小大于数组最大的值时,会抛出异常,
ArrayList的源码解读
根据下标删除数组中的元素,并且返回删除的元素

这是个人理解,理解有差错的地方,欢迎大佬提出来!

相关文章:

  • 2021-07-18
  • 2021-05-11
  • 2021-09-19
  • 2022-01-08
猜你喜欢
  • 2021-06-30
  • 2019-06-03
  • 2021-07-08
  • 2021-09-10
  • 2018-03-01
  • 2021-05-31
  • 2018-11-09
相关资源
相似解决方案