由图可知,arrayList有三个构造方法
ArrayList的扩容机制
- ArrayList是一个动态数组,在使用的过程中它会去根据情况动态的改变集合的大小。
- ArrayList的默认初始容量为10,注意,当我们刚创建一个ArrayList的时候,它的容量大小为0,只有在执行第一次add操作时,才会扩容到10;
- ArrayList也提供了一个自定义初始容量大小的构造方法,我们可以通过改方法自定义ArrayList的初始容量;
- ArrayList的扩容机制,当我们在执行add操作时,发现当前集合容量大小不够了,会扩容到原容量的1.5倍,也就是增加原容量的0.5倍大小,比如大小为10,扩容后为15。
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
// 这是扩容的核心代码
/**
* oldCapacity >> 1 :表示数组的原来长度进行 除2操作
* 例如:oldCapacity = elementData.length = 10
* 二进制表示为:1010,向右以为后:0101 = 5
* 总的来说:就是把原来的数组长度 *1.5
*/
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}