你可以通过下面的操作来设置数组列表的初始大小
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。
当前回答
10是AL的初始容量,而不是size (size是0)。当你要有很多元素时,你应该把初始容量提到一个较高的值,因为它避免了在不断添加元素时扩展容量的开销。
其他回答
我也遇到过类似的问题,只是知道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);
数组列表的容量和它的大小是不一样的。Size等于ArrayList(以及任何其他List实现)中包含的元素的数量。
容量是底层数组的长度,用于内部存储数组列表的元素,并且总是大于或等于列表的大小。
当调用列表上的set(index, element)时,索引与列表元素的实际数量(=size)相关(在代码中为零,因此抛出AIOOBE),而与数组长度(=capacity)无关(这是特定于ArrayList的实现细节)。
set方法对于所有List实现都是通用的,比如LinkedList,它实际上不是通过数组实现的,而是作为一个链接的条目链实现的。
编辑:实际上使用的是add(index, element)方法,而不是set(index, element)方法,但这里的原理是一样的。
普通发布版. .
List <Destination\> destinations = Collections.nCopies(source.size(), Destination.class.newInstance());
如果要添加带有索引的元素,则可以使用数组。
String [] test = new String[length];
test[0] = "add";
我猜你问题的确切答案是:
在数组列表上设置初始大小可以减少内部内存重新分配的次数。 该列表由一个数组支持。如果你指定初始容量为0,在第一次插入一个元素时,内部数组就必须重新调整大小。 如果您大概知道列表将容纳多少元素,那么设置初始容量将减少在使用列表时发生的内存重新分配的次数。