初始容量的确定
-
如果调用的是ArrayList的无参构造,那它的初始容量就是0。
new ArrayList<>();
//底层为
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
-
如果调用的是带参的构造, ArrayList的初始容量会使用参数中指定的容量。
new ArrayList<>(int initialCapacity);
-
如果调用的是带集合参数的构造方法,那ArrayList的初始容量就是集合的容量。
new ArrayList<>(Collection<? extends E> c);
扩容:
add方法:
add(Object o)
-
对于初始长度是0的ArrayList,首次扩容后容量是10,如果是再次扩容的话,容量就是上次容量的1.5倍
-
对于初始长度不是0的ArrayList,那他首次扩容就是上次容量的1.5倍。
addAll方法:
addAll(Collection c)
-
如果初始长度为0,那么第一次扩容会在10和添加后实际元素个数中取最大值。
-
如果初始长度不为0,那么会在原容量的1.5倍和添加后实际元素个数中取最大值。