ArrayList(1) 这样初始化为什么会对性能大幅影响
看了源码还是不胜了解
[color=blue][b]如果list的容量小的话,则会进行数组的copy。这样原来的数组 就被废弃了,又新建了一个数组。
所以,如果进行大量元素的添加,为了效率考虑,构造时指定容量,或者调用[/b][/color]
[code="java"]
ensureCapacity()[/code]
[b]具体解释,见以下代码(JDK1.6update18):[/b]
[code="java"] public boolean add(E e) {
// 先决定是否扩充数组
ensureCapacity(size + 1); // Increments modCount!!
// 然后添加元素
elementData[size++] = e;
return true;
}
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
// 如果容量不够,则进行数组的容量扩充与复制
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
// 新的容量的计算方法
int newCapacity = (oldCapacity * 3) / 2 + 1;
// 如果新的容量还是小的话,则直接使用minCapactiy
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// 复制指定的数组,多余的空位用0填充
elementData = Arrays.copyOf(elementData, newCapacity);
}
}[/code]