我如何初始化Java中的所有零的ArrayList?

看起来像arraylist没有完成它的工作presizing:

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

之后当我尝试访问它时:

 list.get(5) 

它显示为空而不是0.是否有一种方法来初始化所有元素为0像一个确切的大小像C + +呢?

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

要用60个零初始化列表,请执行以下操作:

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

如果您想要创build一个包含60个不同对象的列表,您可以使用Stream API和Supplier ,如下所示:

 List<Person> persons = Stream.generate(Person::new) .limit(60) .collect(Collectors.toList()); 
 // 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); 

你通过的60只是内部存储的初始容量。 这是你觉得可能有多大的一个暗示,当然它不受限制。 如果您需要预设值,您必须自己设置它们,例如:

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

Java 8实现(列表初始化为60零)

 List<Integer> list = IntStream.of(new int[60]) .boxed() .collect(Collectors.toList()); 
  • new int[N] – 创build一个填充零和长度为N的数组
  • boxed() – 每个元素装箱到一个整数
  • collect(Collectors.toList()) – 收集stream的元素

不像那样。 ArrayList只是使用数组作为内部重构。 如果你添加了多于60个元素,那么下面的数组将被删除。 你怎么可以添加尽可能多的内存,你有这个数组。