ArrayList constructor的JDK doc表示初始容量为10.
这实际上是错误的,因为初始容量为0,直到添加到列表中.我检查了开源JDK的源代码以及JDK附带的src.zip.
我明白这是一个性能优化,但这会被认为是一个错误?
解决方法
仅适用于JDK,最多6个
这不是错误.
用于存储列表元素的内部数组的初始容量真的是10.
这并不意味着列表的大小是10.只有一个大小为10的空数组才被创建.
当一个对象被添加到列表中时,一个到最后一个元素的内部指针移动到一个.如果数组的容量不够,则会创建一个更高容量的另一个数组,并将旧数组复制到新数组的第一部分.在这一刻,阵列的容量不会超过10.
代码是:
public ArrayList() {
this(10); // Here the 10 of the default capacity
}
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
对于较新的JDK(来自java 1.7)
注意:在更新的ArrayList(我认为从Java7)的源代码已经改变了.文件仍然是旧的.所以是的,这是文档上的错误!
这里是新版本的构造函数
private static final Object[] EMPTY_ELEMENTDATA = {};
....
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA; // This is 0 capacity!!!!
}
注意:我向Oracle打开了一个新的错误,以查看文档.