java.util.ArrayList默认容量?

时间:2017-05-18 14:50:38

标签: java collections

作为per the Java API,java.util.ArrayList的默认容量为10.

public ArrayList()
     

构造一个初始容量为10的空列表。

我创建了一个列表而没有指定下面的初始容量,发现列表的初始容量为0。

ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list50 = new ArrayList<String>(50);
list.add("1");
list50.add("2");
System.out.println(list.size());

List without initial capacity List with initial capacity specified

我知道我在解释中犯了一些愚蠢的错误,请纠正我。

2 个答案:

答案 0 :(得分:4)

新实例化ArrayList的初始容量为0 - 出于性能原因,空ArrayList使用大小为0的共享默认数组,因此如果没有新项添加到列表中,你不需要为分配一个从未使用过的新数组付费。

添加第一个项目后,将使用DEFAULT_CAPACITY(即10),即ArrayList创建一个大小为10的新数组,然后将保存第一个项目(并且具有另外9个空插槽。

所以我认为你确实使用了稍微错误的文档解释。

初始容量为0,然后在添加第一项时增加到10,以避免立即重新分配以添加下一个后续9项。

答案 1 :(得分:1)

尺寸和容量不一样...... 每次调用add时,ArrayList都会调用 ensureCapacityInternal ,在那里你可以找到DEFAULT_CAPACITY,它就像你指出的那样是....

private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }

    ensureExplicitCapacity(minCapacity);
}

所以这句话

minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);

第一次插入后将容量增加到10