Fro*_*ost 149 java collections
它看起来似乎arraylist
没有做好预备工作:
// presizing
ArrayList<Integer>() list = new ArrayList<Integer>(60);
Run Code Online (Sandbox Code Playgroud)
之后当我尝试访问它时:
list.get(5)
Run Code Online (Sandbox Code Playgroud)
它显示null而不是0.有没有办法将所有元素初始化为精确大小的0,就像C++一样?
aio*_*obe 405
传递给构造函数的整数表示其初始容量,即在需要调整其内部数组大小之前它可以容纳的元素数(并且与列表中的初始元素数无关).
要初始化包含60个零的列表,请执行以下操作:
List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, 0));
Run Code Online (Sandbox Code Playgroud)
如果要创建包含60个不同对象的列表,可以使用Stream API,Supplier
如下所示:
List<Person> persons = Stream.generate(Person::new)
.limit(60)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
cor*_*iKa 11
// 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);
Run Code Online (Sandbox Code Playgroud)
你传递的60只是内部存储的初始容量.它暗示了你认为它有多大,但当然它不受此限制.如果您需要预设值,您必须自己设置它们,例如:
for (int i = 0; i < 60; i++) {
list.add(0);
}
Run Code Online (Sandbox Code Playgroud)
Java 8 实现(列表用60
零初始化):
List<Integer> list = IntStream.of(new int[60])
.boxed()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
new int[N]
- 创建一个用零和长度 N 填充的数组 boxed()
- 每个元素装箱为一个整数collect(Collectors.toList())
- 收集流的元素 归档时间: |
|
查看次数: |
122673 次 |
最近记录: |