你可以通过下面的操作来设置数组列表的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
然而,你不能这样做
arr.add(5, 10);
因为它会导致出界异常。
如果不能访问所分配的空间,那么设置初始大小有什么用呢?
添加函数定义为add(int index, Object element),所以我没有添加到索引10。
你可以通过下面的操作来设置数组列表的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
然而,你不能这样做
arr.add(5, 10);
因为它会导致出界异常。
如果不能访问所分配的空间,那么设置初始大小有什么用呢?
添加函数定义为add(int index, Object element),所以我没有添加到索引10。
当前回答
如果你想要一个预定义大小的列表,你也可以使用:
List<Integer> arr = Arrays.asList(new Integer[10]);
其他回答
你混淆了数组列表的大小和容量:
大小是列表中元素的数量; 容量是指列表在不重新分配其内部结构的情况下可以容纳多少个元素。
当你调用new ArrayList<Integer>(10)时,你是在设置列表的初始容量,而不是它的大小。换句话说,当以这种方式构造数组列表时,数组列表开始时为空。
向数组列表中添加10个元素的一种方法是使用循环:
for (int i = 0; i < 10; i++) {
arr.add(0);
}
完成此操作后,现在可以修改索引0..9处的元素。
如果你想要一个预定义大小的列表,你也可以使用:
List<Integer> arr = Arrays.asList(new Integer[10]);
我猜你问题的确切答案是:
在数组列表上设置初始大小可以减少内部内存重新分配的次数。 该列表由一个数组支持。如果你指定初始容量为0,在第一次插入一个元素时,内部数组就必须重新调整大小。 如果您大概知道列表将容纳多少元素,那么设置初始容量将减少在使用列表时发生的内存重新分配的次数。
我对流的看法。我觉得还是用它比较好
IntStream.generate(i -> MyClass.contruct())
.limit(INT_SIZE)
.collect(Collectors.toList());
可以灵活地设置任何初始值。
如果你想使用集合。填充(列表,obj);为了用重复的对象填充列表,您可以使用
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
这一行将10乘以0复制到数组列表中