-
add
方法 调用ensureCapacityInternal
方法,确保容量够用。 -
ensureCapacityInternal
方法调用ensureExplicitCapacity
方法。- 若容量不够则需要扩容,调用
grow
方法。
- 若容量不够则需要扩容,调用
-
grow
则是扩容的秘密。- 获取旧容量大小。
- 创建新容量大小为旧容量的1.5倍。
- 将数据全部拷贝到新的容量上。
private void grow(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
网友评论