ArrayList定义
顾名思义,ArrayList是对List的一种数组实现,部分代码如下:
......
private transient Object[] elementData;
......
elementData即为ArrayList的底层数据存储。
ArrayList的扩容
ArrayList的默认容量是10,如下:
public ArrayList() {
this(10);
}
但当数据不断增加时,底层数组就要重构扩容了,如下:
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
由上述代码可以看出,ArrayList扩容因子是3/2+1,扩容时,构建新数组,然后将旧数组copy到新数组;