Answers:
传递给构造函数的整数表示其初始容量,即,在需要调整内部数组大小之前可以容纳的元素数量(与列表中的元素初始数量无关)。
要使用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());
ArrayList
它,而是简单地编程为List
。当然,这是OP的决定。
nCopies
是不可变的,因此创建一个新列表ArrayList
可能是一个好主意。
nCopies
复杂对象使用时,集合不会使用60个不同的对象实例化,而是使用相同的对象实例化60次。因此,仅将其用于基元。
nCopies
对引用类型有用的场景:不可变的对象,例如字符串,空对象模式,枚举常量,……无论如何,我用创建60个不同对象的解决方案更新了答案。
// 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);
IndexOutOfBoundsException
与List<Integer> list = new ArrayList<Integer>(60); Collections.fill(list, new Integer(0)); list.get(5);
Arrays.asList
产生List
不允许添加或删除的,因此它与OP的要求不太相同。如果您需要做的只是工作,那将起作用set
,但是在这种情况下,最好使用数组。