作为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());
我知道我在解释中犯了一些愚蠢的错误,请纠正我。
答案 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