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

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

然而,你不能这样做

arr.add(5, 10);

因为它会导致出界异常。

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

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


当前回答

我猜你问题的确切答案是:

在数组列表上设置初始大小可以减少内部内存重新分配的次数。 该列表由一个数组支持。如果你指定初始容量为0,在第一次插入一个元素时,内部数组就必须重新调整大小。 如果您大概知道列表将容纳多少元素,那么设置初始容量将减少在使用列表时发生的内存重新分配的次数。

其他回答

这可能会帮助到一些人

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

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

如果你想在数组列表中添加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。

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

myList = new ArrayList(10);

//  myList.add(3, "DDD");
//  myList.add(9, "III");
    myList.add(0, "AAA");
    myList.add(1, "BBB");

    for(String item:myList){
        System.out.println("inside list : "+item);
    }

/*在内部声明数组列表的初始容量只是为了节省移位时间;当我们在内部添加元素时,它会检查容量以增加容量,你可以先添加索引为0的元素,然后再添加索引为1的元素,等等。* /