对于ArrayList构造函数,JDK API文档不正确.那是一个错误吗?

Ase*_*sal 10 java documentation arraylist

ArrayList构造函数的 JDK doc 表示初始容量为10.

这实际上是错误的,因为初始容量为0,直到将某些内容添加到列表中.我检查了Open JDK的源代码以及JDK附带的src.zip.

我知道这是性能优化,但这会被视为错误吗?

Dav*_*INO 7

仅适用于最多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打开了一个新错误以查看文档.

  • 这是什么版本的?在1.8中,构造函数的编码方式与我在第一条评论中提到的方式相同 (2认同)