和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

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。

posted @ 2021-10-04 20:04  klaus08  阅读(140)  评论(0)    收藏  举报