你可以通过下面的操作来设置数组列表的初始大小

ArrayList<Integer> arr=new ArrayList<Integer>(10);

然而,你不能这样做

arr.add(5, 10);

因为它会导致出界异常。

如果不能访问所分配的空间,那么设置初始大小有什么用呢?

添加函数定义为add(int index, Object element),所以我没有添加到索引10。


当前回答

如果你想在数组列表中添加10个元素,你可以这样做:

for (int i = 0; i < 10; i++)
    arr.add(i);

如果你已经声明了一个数组大小变量你应该使用变量size而不是数字10

其他回答

虽然在这方面比较晚,但是在Java 8之后,我个人发现下面这种使用Stream API的方法更加简洁,并且可以作为公认答案的替代方案。

例如,

Arrays.stream(new int[size]).boxed().collect(Collectors.toList())

其中size是所需的List大小,并且没有这里提到的缺点,List中的所有元素都初始化为0。

(我做了一个快速搜索,没有看到任何答案张贴的流-请让我知道这个答案是否多余,我可以删除它)

你混淆了数组列表的大小和容量:

大小是列表中元素的数量; 容量是指列表在不重新分配其内部结构的情况下可以容纳多少个元素。

当你调用new ArrayList<Integer>(10)时,你是在设置列表的初始容量,而不是它的大小。换句话说,当以这种方式构造数组列表时,数组列表开始时为空。

向数组列表中添加10个元素的一种方法是使用循环:

for (int i = 0; i < 10; i++) {
  arr.add(0);
}

完成此操作后,现在可以修改索引0..9处的元素。

10是AL的初始容量,而不是size (size是0)。当你要有很多元素时,你应该把初始容量提到一个较高的值,因为它避免了在不断添加元素时扩展容量的开销。

数组列表的容量和它的大小是不一样的。Size等于ArrayList(以及任何其他List实现)中包含的元素的数量。

容量是底层数组的长度,用于内部存储数组列表的元素,并且总是大于或等于列表的大小。

当调用列表上的set(index, element)时,索引与列表元素的实际数量(=size)相关(在代码中为零,因此抛出AIOOBE),而与数组长度(=capacity)无关(这是特定于ArrayList的实现细节)。

set方法对于所有List实现都是通用的,比如LinkedList,它实际上不是通过数组实现的,而是作为一个链接的条目链实现的。

编辑:实际上使用的是add(index, element)方法,而不是set(index, element)方法,但这里的原理是一样的。

我对流的看法。我觉得还是用它比较好

IntStream.generate(i -> MyClass.contruct())
         .limit(INT_SIZE)
         .collect(Collectors.toList());

可以灵活地设置任何初始值。