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

2022-08-31 06:17:02

它似乎没有做好预调整大小的工作:arraylist

// presizing 

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

之后,当我尝试访问它时:

list.get(5) 

它不是返回 0,而是抛出 IndexOutOfBoundsException: Index 5 超出长度为 0 的边界

有没有办法将所有元素初始化为0的精确大小,就像C++所做的那样?


答案 1

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

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

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

如果要创建包含 60 个不同对象的列表,可以将 Stream API 与以下内容结合使用:Supplier

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

答案 2
// 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);