以下代码确保内部容量为11,
ArrayList list = new ArrayList(11);
那么为什么/何时应该在外部使用公共方法ensureCapacity()?
list.ensureCapacity(11);
如果没有用,为什么要公开?
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);
}
}
答案 0 :(得分:5)
致电new ArrayList(n)
初始化容量为ArrayList
的{{1}}。
但是,您可能希望向已创建的n
添加大量元素并且ArrayList
已满。假设我们想要添加ArrayList
个新元素。
调用x
然后添加元素会比仅添加元素并让list.ensureCapacity(n + x)
动态调整大小更有效。
考虑这个粗略的例子:
List
答案 1 :(得分:1)
如果您不想自动调整arrylist的大小并希望保持对自己的控制,则可能需要使用它。例如你创建了一个5大小的ArrayList。如果添加第6个元素,它将为5 + 5,即10个元素创建一个空格。如果您不希望arryList的大小加倍,可以使用list.ensureCapacity
来判断您需要多少元素。
这适用于小数据,但假设您的arrayList增长到5K。
根据java文档https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html:
An application can increase the capacity of an ArrayList instance before adding a large number of elements using the ensureCapacity operation. This may reduce the amount of incremental reallocation.
答案 2 :(得分:0)
您应该将ensureCapacity
主要用作确保可增长数组容量的任何其他方法:在没有多次重新分配的情况下添加预先知道的大量项目,因为如果您逐个添加项目列表由于阵列容量耗尽,可能会有很多重新分配。
考虑一个简单的场景,你有一个10个元素的数组,并且重新分配是以2为增长因子,如果添加1024个项目,你将有10个重新分配,ensureCapacity(1034)
只有一个(在追加开始时)。