ArrayList底层源码分析
底层原理
创建使用ArrayList<>()创建空对象的时候,会在底层创建一个长度为0的数组。该数组的名称为
elementData
,定义变量size
size
变量有两层含义- ① 表示元素的个数,也就是集合的长度
- ② 表示下一个元素的存入位置
- 添加第一个元素之后,size++,同时底层会创建一个新的长度为
DEFAULT_CAPACITY
=10的数组 - 扩容机制1:
- 当存满的时候,会创建一个新的数组,新数组的长度是原来的1.5倍,也就是长度为15。再把所有的元素拷贝到新数组中。如果继续添加数据,这个长度为15的数组也满了,那就会继续按照相同的方式扩容1.5倍。
- 扩容时机2:
- 当使用例如
addAll()
这样的方法一次性添加多个数据,扩容1.5倍的方法不够用时,则以扩容的实际大小为准。
- 当使用例如
成员变量:
1 | private static final int DEFAULT_CAPACITY = 10; |
构造方法:
1 | //无参构造器,最开始创建的是空数组,当添加第一个元素时初始化容量为10。 |
add方法
- add(E e):直接在ArrayList尾部追加元素
- add(int index, E element):在指定index位置追加元素
1 | public boolean add(E e) { |
grow()方法
1 | private Object[] grow(int minCapacity) { |