为什么ArrayList初始化容量大小为10?
今天笔者在看源码时,无意间发现Arraylist的初始化容量大小为10 那么它为什么要设置为10呢? 下文笔者将一一道来,如下所示
ArrayList源码查看
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
从jdk1.2~jdk1.6源码中一直是默认10
jdk1.7及之后,则默认为空数组
/**
* Shared empty array instance used for default sized empty instances. We
* distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
* first element is added.
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
在add方法中调用了ensureCapacityInternal方法,进入该方法一开始是一个空容器所以size=0传入的minCapacity=1:
private void ensureCapacityInternal(int minCapacity) {
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
上述方法中先通过calculateCapacity来计算容量:
private static int calculateCapacity(Object[] elementData, int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
我们会惊奇的发现,jdk1.7之后采用懒加载的方式,实现默认容量为10
那么从上面的默认容量为10 可能只是作者的习惯而已,没有任何实质性的用途
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


