java - ArrayList 调整当前底层数组的大小或创建一个新数组?

标签 java arrays arraylist

ArrayList 调整当前底层数组的大小还是创建一个新数组? 我有时读到过提到 ArrayList 的“可调整大小的数组”,但是我认为每次“调整大小”时都会创建一个新数组。 现实中会发生什么,同一个数组会调整大小,还是每次都会创建一个新数组(容量限制结束)?

谢谢, 确实是这样

最佳答案

您无法在 Java 中调整数组的大小。必须创建一个新的。

查看 OpenJDK 实现,您可以看到 add方法调用名为 ensureCapacity 的方法如果需要,将通过复制来“调整”支持 Object 数组的大小。

public void  ensureCapacity(int minCapacity) {
    modCount++;
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity) {
        Object oldData[] = elementData;
        int newCapacity = (oldCapacity * 3)/2 + 1;
        if (newCapacity < minCapacity)
            newCapacity = minCapacity;
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

关于java - ArrayList 调整当前底层数组的大小或创建一个新数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19366235/

相关文章:

java - 越来越严重 : Context [/myapplication] startup failed due to previous errors

java - 为什么我不能以这种方式在 for 循环中定义变量?

arrays - 通过函数修改结构的固定数组

java - 如何修复打印为一列的二维数组

java - 如何防止 ArrayList 在 Java GUI 中重置?

java - 屏幕旋转导致文字颜色变化

java - 如何在我的 vaadin 应用程序中添加面包屑?

python - Numpy 创建一个空的 alpha 图像

java - 在数组 :O 中获取数组中的最后一个对象

java - 为每个 HashMap 键值创建唯一的ArrayList - Java