ArrayList 底层的实现
- 底层:数组(jdk1.8)实现。
- ArrayList底层的几个基本属性。
- 1.在开始调用空构造器时,底层数组为空{}
- 2.向数组中添加元素时,调用add方法,底层数组被重新赋值。重新赋值后数组的大小为10。
-
当数组的长度超过10后,就会进行扩容,扩容后数组的长度为15。(扩容为原来数组长度的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);)
private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);}
ArrayList jdk1.8源码小结。
* 开始时数组的大小为0,当添加元素时,进行add方法时,会初始化一个大小为10的数组。
* 和jdk1.7相比没有一开始就初始化一个容量为10的数组,节省了内存。