总的来说,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。