如何在Java中使用全零来初始化ArrayList?

时间:2011-04-08 20:54:43

标签: java collections

看起来arraylist没有做好预备工作:

// presizing 

ArrayList<Integer>() list = new ArrayList<Integer>(60);

之后当我尝试访问它时:

list.get(5) 

它显示null而不是0。 有没有办法将所有元素初始化为精确大小的0,就像C ++一样?

5 个答案:

答案 0 :(得分:379)

传递给构造函数的整数表示其初始容量,即它需要调整其内部数组之前可以容纳的元素数(并且与初始元素数无关)在列表中。)

要初始化包含60个零的列表:

List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, 0));

如果要创建包含60个不同对象的列表,可以使用带有Supplier的Stream API,如下所示:

List<Person> persons = Stream.generate(Person::new)
                             .limit(60)
                             .collect(Collectors.toList());

答案 1 :(得分:10)

// apparently this is broken. Whoops for me!
java.util.Collections.fill(list,new Integer(0));

// this is better
Integer[] data = new Integer[60];
Arrays.fill(data,new Integer(0));
List<Integer> list = Arrays.asList(data);

答案 2 :(得分:8)

你传递的60只是内部存储的初始容量。它暗示了你认为它有多大,但当然它不受此限制。如果您需要预设值,您必须自己设置它们,例如:

for (int i = 0; i < 60; i++) {
    list.add(0);
}

答案 3 :(得分:3)

Java 8实现(使用name=blabla&data=test零初始化的列表)

60
  • List<Integer> list = IntStream.of(new int[60]) .boxed() .collect(Collectors.toList()); - 创建一个充满零和数组的数组。长度N
  • new int[N] - 每个元素都装在一个整数
  • boxed() - 收集信息流的元素

答案 4 :(得分:1)

不是那样的。 ArrayList只使用数组作为内部重复。如果添加超过60个元素,那么底层阵列将被删除。你怎么能为这个数组添加尽可能多的RAM。