总的来说,ArrayList扩容机制分为以下步骤
- 无参初始化:初始化默认长度为10的列表(创建时为空,添加第一个元素才扩充至10) 有参初始化:初始化指定长度的列表 有参:包含指定collection元素的列表
- 添加元素:如果没有占满列表则直接添加。如果占满了,用grow()方法扩容至
newCapacity = oldCapacity + (oldCapacity >> 1)
- 判断新容量大小:如果新容量大小大于
MAX_ARRAY_SIZE
即Integer.MAX_VALUE-8
,则比较MAX_ARRAY_SIZE
和minCapacity
。如果minCapacity
大于最大容量,则新容量为Integer.MAX_VALUE
,否则新容量大小为MAX_ARRAY_SZIE
。