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

Ind*_*tIs 0 java arrays arraylist

ArrayList调整当前底层数组的大小或创建一个新数组?我读过有时会引用ArrayList的"可调整大小的数组",但我认为每次"调整大小"时它都会被创建一个新的.实际上会发生什么,相同的数组会被调整大小或每次都创建一个新数组(容量限制结束)?

谢谢,确实是的

Bil*_*ard 6

您无法在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);
    }
}
Run Code Online (Sandbox Code Playgroud)