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

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

然而,你不能这样做

arr.add(5, 10);

因为它会导致出界异常。

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

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


当前回答

我也遇到过类似的问题,只是知道arrayList是List接口的一个可调整大小的数组实现,我还希望您可以将元素添加到任何点,但至少可以选择定义初始大小。 不管怎样,你可以先创建一个数组,然后把它转换成一个列表,比如:

  int index = 5;
  int size = 10;

  Integer[] array = new Integer[size];
  array[index] = value;
  ...
  List<Integer> list = Arrays.asList(array);

or

  List<Integer> list = Arrays.asList(new Integer[size]);
  list.set(index, value);

其他回答

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

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

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

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

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

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

如果你想使用集合。填充(列表,obj);为了用重复的对象填充列表,您可以使用

ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));

这一行将10乘以0复制到数组列表中

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

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

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

这可能会帮助到一些人

ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));

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

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

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