ArrayList底层的动态数组怎么实现?

数组怎么实现动态分配长度?数组的长度为什么不固定?求大神讲解

没有动态,最终还是数组复制,小数组换大数组

//这是数据扩充的核心代码,最终就是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的底层还是数组,每次分配一批,当数组不够的时候,会重新分配,然后拷贝到新的数组中。