1 | // 无参构造 |
ensureCapacityInternal()中调用ensureCapacityInternal()方法,而ensureCapacityInternal()方法依赖于calculateCapacity()方法返回值
在calculateCapacity(elementData, minCapacity)中,要判断Object[] elementData是不是默认数组,且要比较最小容量minCapacity和默认值DEFAULT_CAPACITY的值进行返回最大的那个即:
是默认数组,且DEFAULT_CAPACITY >= minCapacity,返回 DEFAULT_CAPACITY
是默认数组,且DEFAULT_CAPACITY < minCapacity,返回minCapacity。
不是默认数组 直接返回 minCapacity
ensureExplicitCapacity(int minCapacity)方法,接受calculateCapacity()方法返回的值,然后进行判断是否进行扩容 minCapacity - elementData.length > 0,即:本来的size 执行 + 1 后的长度如果大于 当前数组的长度了就会执行grow() 扩容机制。
grow() 中,首先让 elementData.length 扩容1.5 倍,
如果扩容后仍然 newCapacity - minCapacity < 0,容量不够,那直接设置容量为minCapacity ,
如果扩容后,newCapacity - MAX_ARRAY_SIZE > 0,超过最大容量值,执行hugeCapacity()方法确保不会分配超出 JVM 允许范围的内存,抛出异常且进行判断 (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE,返回 Integer.MAX_VALUE 或者 MAX_ARRAY_SIZE
进行Arrays.copyOf(elementData, newCapacity),扩容
将元素插入到数组末尾。
返回添加成功