问题

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

// presizing 

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

之后当我尝试访问它时:

list.get(5)

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


#1 热门回答(330 赞)

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

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

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

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

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

#2 热门回答(9 赞)

// 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);

#3 热门回答(8 赞)

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

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

原文链接