本文只是记录下自己面试时候遇到的问题
ArrayList 的内部实现,其实是用的数组存放值,
扩容其实是,对数组的动态增长。
扩容机制
提示: 没有存放元素的时候,初始容量为0
元素个数大于容量的时候,会重新创建一个原来容量为1.5倍的新数组。 然后把原来的数组Copy 到新数组
案例 从其他帖子拷贝(https://blog.csdn.net/eases_stone/article/details/79843851)
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length; // 原来的容量
int newCapacity = oldCapacity + (oldCapacity >> 1); // 新的容量,原来容量的1.5倍。
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0) // 如果大于ArrayList 可以容许的最大容量,则设置为最大容量。
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity); // 最终利用Arrays.coppy 进行扩容,生成一个1.5倍元素的数组。(即例子中的15个元素的数组。)
}