有什么情况我应该在ArrayList外部使用ensureCapacity()吗?

Mil*_*kar 3 java arraylist capacity java-8

以下代码确保内部容量为11,

ArrayList list = new ArrayList(11);
Run Code Online (Sandbox Code Playgroud)

那么为什么/何时我应该在外部使用公共方法ensureCapacity()?

list.ensureCapacity(11);
Run Code Online (Sandbox Code Playgroud)

如果没有用,为什么要公开?

public void ensureCapacity(int minCapacity) {
    int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
        // any size if not default element table
        ? 0
        // larger than default for default empty table. It's already
        // supposed to be at default size.
        : DEFAULT_CAPACITY;

    if (minCapacity > minExpand) {
        ensureExplicitCapacity(minCapacity);
    }
}
Run Code Online (Sandbox Code Playgroud)

exp*_*plv 5

呼叫new ArrayList(n)初始化ArrayList容量n.

但是,可能存在这样的情况:您现在想要向已创建的元素添加大量元素ArrayList并且ArrayList已满.让我们说我们想要添加x新元素.

调用list.ensureCapacity(n + x)然后添加元素会比仅添加元素并List动态调整大小更有效.

考虑这个粗略的例子:

ArrayList<Integer> exampleList = new ArrayList<>(200);

Integer[] exampleArray = new Integer[800];

exampleList.ensureCapacity(1000);

Collections.addAll(exampleList, exampleArray);
Run Code Online (Sandbox Code Playgroud)