您可以通过执行设置 ArrayList 的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
但是,你不能这样做
arr.add(5, 10);
因为它会导致越界异常。
如果您无法访问分配的空间,那么设置初始大小有什么用?
add 函数被定义为add(int index, Object element)
所以我没有添加到索引 10。
您可以通过执行设置 ArrayList 的初始大小
ArrayList<Integer> arr=new ArrayList<Integer>(10);
但是,你不能这样做
arr.add(5, 10);
因为它会导致越界异常。
如果您无法访问分配的空间,那么设置初始大小有什么用?
add 函数被定义为add(int index, Object element)
所以我没有添加到索引 10。
您将数组列表的大小与其容量混淆了:
当您调用 时new ArrayList<Integer>(10)
,您正在设置列表的初始容量,而不是其大小。换句话说,当以这种方式构造时,数组列表开始它的生命是空的。
将十个元素添加到数组列表的一种方法是使用循环:
for (int i = 0; i < 10; i++) {
arr.add(0);
}
完成此操作后,您现在可以修改索引 0..9 处的元素。
如果您想要一个具有预定义大小的列表,您还可以使用:
List<Integer> arr = Arrays.asList(new Integer[10]);
如果你想使用 Collections.fill(list, obj); 为了用重复的对象填充列表,您可以使用
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
该行将 10 乘以 0 复制到您的 ArrayList
an的容量ArrayList
与它的size 不同。大小等于ArrayList
(和任何其他List
实现)中包含的元素的数量。
容量只是用于内部存储元素的底层数组的长度,ArrayList
并且总是大于或等于列表的大小。
set(index, element)
在列表上调用时,index
与列表元素的实际数量(=大小)相关(在您的代码中为零,因此AIOOBE
被抛出),而不是数组长度(=容量)(这是特定于实现细节到ArrayList
)。
该set
方法对所有List
实现都是通用的,例如LinkedList
,它实际上不是由数组实现的,而是作为条目的链接链实现的。
编辑:您实际上使用的是add(index, element)
方法,而不是set(index, element)
,但这里的原理是一样的。
如果要添加带有索引的元素,则可以改用数组。
String [] test = new String[length];
test[0] = "add";
10 是 AL 的初始容量,而不是大小(为 0)。当您将拥有大量元素时,您应该将初始容量提到一个较高的值,因为它避免了在您不断添加元素时扩展容量的开销。
我想您的问题的确切答案是:
在 ArrayList 上设置初始大小会减少 nr。内部存储器重新分配的次数必须发生。该列表由数组支持。如果您指定初始容量 0,则在第一次插入元素时,内部数组就必须调整大小。如果您大致了解列表将包含多少个元素,则设置初始容量将减少 nr。使用列表时发生的内存重新分配。
这可能会帮助某人-
ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
现在您的列表中没有元素,因此当它不存在时,您无法添加到列表的索引 5。您将列表的容量与其当前大小混淆了。
只需致电:
arr.add(10)
将整数添加到您的 ArrayList
我遇到了类似的问题,并且只知道 arrayList 是 List 接口的可调整大小的数组实现,我还希望您可以将元素添加到任何点,但至少可以选择定义初始大小。无论如何,您可以先创建一个数组并将其转换为如下列表:
int index = 5;
int size = 10;
Integer[] array = new Integer[size];
array[index] = value;
...
List<Integer> list = Arrays.asList(array);
或者
List<Integer> list = Arrays.asList(new Integer[size]);
list.set(index, value);
尽管您的 arraylist 的容量为 10,但真正的列表在这里没有元素。add 方法用于将元素插入到实际列表中。由于它没有元素,因此您不能将元素插入到索引 5 中。
如果您想添加 10 个项目,您ArrayList
可以尝试:
for (int i = 0; i < 10; i++)
arr.add(i);
如果您已经声明了一个数组大小变量,您将使用该变量size
而不是数字 '10'
ArrayList 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);
}
/*Declare the initial capasity of arraylist is nothing but saving shifting time in internally; when we add the element internally it check the capasity to increase the capasity, you could add the element at 0 index initially then 1 and so on. */
贡献..
List <Destination\> destinations = Collections.nCopies(source.size(), Destination.class.newInstance());
我的两分钱Stream
。我认为最好使用
IntStream.generate(i -> MyClass.contruct())
.limit(INT_SIZE)
.collect(Collectors.toList());
可以灵活地放置任何初始值。