ArrayList是基于数组实现的,是一个动态数组,容量能自动增长。调用add()或者addAll()方法时,会进行扩容判断。
一、add(E e) 方法
public boolean add(E e) {
// 判断是否需要扩容
ensureCapacityInternal(size + 1);
// 将新元素追加到相应的数组中
elementData[size++] = e;
return true;
}
ensureCapacityInternal(int minCapacity)方法判断是否需要扩容
// minCapacity = size + 1
private void ensureCapacityInternal(int minCapacity) {
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
private static int calculateCapacity(Object[] elementData, int minCapacity) {
// 如果当前数组为空,则所需容量就是默认容量
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++