每次扩容为本来的 1.5倍
首要当咱们在用 list.add(Object); 首要 在add的办法履行 ensureCapacityInternal(int minCapacity){} 办法 参数为 当时list.size() + 1
后履行 ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
先 履行参数中的办法calculateCapacity(Object[] elementData, int minCapacity)
在办法中先 判别 emementDate (等价于 ArrayList 存储元素的数组)是否为空
为空 则 履行return Math.max(DEFAULT_CAPACITY, minCapacity);
DEFAULT_CAPACITY 为 数组初始长度 为10 minCapacity=为 ArrayList当时数组动态数组长度
Math.max(); 比较 DEFAULT_CAPACITY 和 minCapacity 巨细 输出 大的那个数 为长度
得到参数后然后在履行ensureExplicitCapacity(int minCapacity) 假如 参数 减去ArrayList.length >0
就履行 grow(minCapacity); 办法
int oldCapacity = elementData.length; //界说一个现有的长度
int newCapacity = oldCapacity + (oldCapacity >> 1); //界说一个 新长度
if (newCapacity - minCapacity < 0) //假如新长度减去 参数的长度 小于0
newCapacity = minCapacity; //那么长度就为 这个参数
if (newCapacity - MAX_ARRAY_SIZE > 0) //新长度 减去 数组最大长度
newCapacity = hugeCapacity(minCapacity); //新长度 为 int最大的值
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ? // 履行 hugeCapacity 将 最大的值给 minCapacity
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity); // 将 newCapacity 给 elementData