Ase*_*sal 10 java documentation arraylist
ArrayList构造函数的 JDK doc 表示初始容量为10.
这实际上是错误的,因为初始容量为0,直到将某些内容添加到列表中.我检查了Open JDK的源代码以及JDK附带的src.zip.
我知道这是性能优化,但这会被视为错误吗?
仅适用于最多6个JDK
这不是错误.
用于存储列表元素的内部数组的初始容量实际为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];
}
Run Code Online (Sandbox Code Playgroud)
对于较新的JDK(来自java 1.7)
重要说明:在较新版本ArrayList(我认为来自Java7)中,是的,源代码已更改.文档仍然是旧文档.所以是的,它是文档中的错误!
这里是构造函数的新版本
private static final Object[] EMPTY_ELEMENTDATA = {};
....
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA; // This is 0 capacity!!!!
}
Run Code Online (Sandbox Code Playgroud)
注意:我向Oracle打开了一个新错误以查看文档.