ArrayList
ArrayList
CAMELLIA!!! note 目录
ArrayList
ArrayList集合底层采用了数组这种数据结构。
ArrayList集合优点: 底层是数组,因此根据下标查找元素的时间复杂度是O(1),检索效率高。
ArrayList集合缺点: 随机增删元素的效率较低。不过只要数组的容量还没满,对末尾元素进行增删的效率不受影响。
ArrayList集合适用场景: 需要频繁检索元素,并且很少进行随机增删元素时,建议使用ArrayList集合。
一、ArrayList初始化容量
1.1 调用ArrayList无参构造方法初始化的容量
调用ArrayList集合的无参数构造方法时,初始容量为0,第一次添加元素时,容量会扩展为10。
- 源码
1
2
3public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
1 | /** |
二、ArrayList扩容策略
初始容量:通过无参数构造方法创建的ArrayList,初始容量为0。第一次添加元素时,容量会扩展为10。
扩容条件:当ArrayList中添加新元素时,如果当前容量不足以容纳新的元素,ArrayList会进行扩容。
扩容大小:扩容时,新容量为旧容量的1.5倍(即旧容量加上旧容量的一半)。具体来说,扩容后的新容量计算公式为
newCapacity = oldCapacity + (oldCapacity >> 1)
。确保容量:扩容后的新容量必须能够容纳当前需要存储的元素数量。如果按上述计算的新容量仍不足以容纳新元素,ArrayList会将新容量直接设置为所需要的最小容量。
三、ArrayList集合源码分析
3.1 属性分析
transient Object[] elementData;
这是用来存储 ArrayList 元素的数组。ArrayList 的容量就是这个数组的长度。
如果一个 ArrayList 是空的,并且它的初始数据是 DEFAULTCAPACITY_EMPTY_ELEMENTDATA,那么在添加第一个元素时,它的容量会扩展到 DEFAULT_CAPACITY。private int size;
ArrayList 的大小(它实际包含的元素数量)。