为什么ArrayList的ensureCapacity()方法不会增加列表的大小?

时间:2015-07-26 17:32:50

标签: java arraylist size

当我执行以下代码时,输​​出为1。为什么会这样?

import java.util.*;

class Output {
  public static void main(String args[]) {
    ArrayList obj = new ArrayList();
    obj.add("A");
    obj.ensureCapacity(3);
    System.out.println(obj.size());
  }
}

2 个答案:

答案 0 :(得分:2)

size()指的是实际位于List中的元素数,而不是支持数组的大小。

Documentation:

  

public int size()

     

返回此列表中的元素数。

实施ArrayList背后的想法是,你应该很少关心的确是的大小,你应该只关心它足够大(用ensureCapacity()控制),而不是太大(用trimToSize()控制)。但大多数情况下,您不需要知道或关心后备阵列的大小。

答案 1 :(得分:2)

size()告诉你arraylist中元素的数量。另一方面,ensureCapacity(n)你告诉arraylist你将至少有n个元素。

Arraylist动态增长,假设它的初始容量为x,一旦此容量即将结束,它会创建一个大小为2x的新数组。如果这还要超过4x。虽然将数组大小加倍会产生开销,但您必须复制所有元素。

但是在开始时,如果你知道你将至少有10x个元素,那么你可以通过使用10x让arraylist确保至少ensureCapacity(10x)个容量这样你就可以避免所有的开销。