扩容机制简述
扩容算法是基于方法grow()的,ArrayList的几个构造参数,决定了在初始状态下,容器的大小要么为0要么为自己设定的某个值。那么具体的扩容,就是在add()等方法进行的时候进行一次判定——如果有数组溢出的风险,那么就进行扩容。
扩容的时候先判定数组大小。数组是空或者小于10,那么在扩容的时候将数组直接分配大小到10。这也是一部分人认为ArrayList最小容量是10的原因。之后每次扩容,是变成原数组长度的1.5倍。但是有一个最大值——,如果大于这个数会看当前数组大小到底是多少,如果小于该值,那么直接扩容到
,反之,则扩容到最大值
。
在调用add()方法的时候触发扩容机制
先来看一下add()的一个常用的重载方法:
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] &