Java ArrayList调整当前基础数组的大小还是创建一个新数组?

Java ArrayList调整当前基础数组的大小还是创建一个新数组?,java,arrays,arraylist,Java,Arrays,Arraylist,ArrayList调整当前基础数组的大小还是创建一个新数组? 我读过一些关于ArrayList的可调整大小的数组的文章,但是我认为每次调整大小时都会创建一个新的数组。 实际上,每次容量限制结束时,同一个阵列都会调整大小,或者创建一个新阵列,这会发生什么 谢谢, 实际上,您不能在Java中调整数组的大小。必须创建一个新的 查看OpenJDK实现,您可以看到该方法调用一个名为的方法,如果需要,该方法将通过复制来调整备份对象数组的大小 public void ensureCapacity(int m

ArrayList调整当前基础数组的大小还是创建一个新数组? 我读过一些关于ArrayList的可调整大小的数组的文章,但是我认为每次调整大小时都会创建一个新的数组。 实际上,每次容量限制结束时,同一个阵列都会调整大小,或者创建一个新阵列,这会发生什么

谢谢,
实际上,您不能在Java中调整数组的大小。必须创建一个新的

查看OpenJDK实现,您可以看到该方法调用一个名为的方法,如果需要,该方法将通过复制来调整备份对象数组的大小

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);
    }
}

向arrayList添加对象时,如果超出容量 然后将创建新的数组,如下所示

Arrays.copyOf(elementData, newCapacity)

在内部,ArrayList使用方法ensureCapacity确保底层数组始终足够大。从:


在第187行,您可以看到它调用Arrays.copyOf,并指定了长度。它创建一个新的数组,根据数组的类型,它可以用null、零等填充。

Java中的数组大小是固定的。不能动态增加数组的大小

在向ArrayList添加对象的情况下,请检查ensureCapacity,如果它超过了限制,则始终会创建新数组


希望这能对您有所帮助。

请注意,数组不能更改大小。请注意,它会根据负载系数创建一个更大的新数组,并将所有元素添加到该数组中。它不会在内存中存储多个数组。我不清楚你的问题是否就是这个意思。
178     public void ensureCapacity(int minCapacity) {
179         modCount++;
180         int oldCapacity = elementData.length;
181         if (minCapacity > oldCapacity) {
182             Object oldData[] = elementData;
183             int newCapacity = (oldCapacity * 3)/2 + 1;
184             if (newCapacity < minCapacity)
185                 newCapacity = minCapacity;
186             // minCapacity is usually close to size, so this is a win:
187             elementData = Arrays.copyOf(elementData, newCapacity);
188         }
189     }