ArrayList扩容过程

size和capacity是不一样的。添加元素时,检测当前capacity是否能够容纳size+1的元素,也就是比较他们的大小。

确定所需要的最小空间 minCapacity(当前arrayList是不是空的,是的话返回max{10,size+1},不是的话就返回size+1)。

如果 minCapacity大于当前数组空间的容量,就要进行扩容。

默认扩容后的新容量newCapacity是原来容量oldCapacity的 1.5 倍,比较newCapacity和minCapacity的大小:
newCapacity - minCapacity < 0,说明扩容后还不够,所以直接让 newCapacity = minCapacity;
此时如果newCapacity的值大于 MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8),就要进行更大的扩容:

如果minCapacity是负数,说明已经发生了溢出,直接抛出OOM溢出。否则的话,如果minCapacity > MAX_ARRAY_SIZE,那么newCapacity=Integet.MAX_VALUE;如果minCapacity <= MAX_ARRAY_SIZE,那么newCapacity=MAX_ARRAY_SIZE。
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15367081.html

浙公网安备 33010602011771号