数组怎么实现动态分配长度?数组的长度为什么不固定?求大神讲解
没有动态,最终还是数组复制,小数组换大数组
//这是数据扩充的核心代码,最终就是arrays.copyof
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
数组的长度是固定的,arrayList的add会生成个新的“够长的数组”
elementData = Arrays.copyOf(elementData, newCapacity);
看一看源码就明白了
ArrayList的底层还是数组,每次分配一批,当数组不够的时候,会重新分配,然后拷贝到新的数组中。