您可以通过
设置ArrayList的初始大小ArrayList<Integer> arr=new ArrayList<Integer>(10);
然而,你做不到
arr.add(5, 10);
因为它会导致越界异常。
如果您无法访问分配的空间,设置初始大小有什么用?
add函数定义为add(int index, Object element)
,因此我不会添加到索引10。
答案 0 :(得分:330)
您将数组列表的大小与其容量混淆:
当您致电new ArrayList<Integer>(10)
时,您正在设置列表的初始容量,而不是其大小。换句话说,当以这种方式构造时,数组列表的生命空白。
将十个元素添加到数组列表的一种方法是使用循环:
for (int i = 0; i < 10; i++) {
arr.add(0);
}
完成此操作后,您现在可以修改索引0..9。
中的元素答案 1 :(得分:89)
如果您想要一个具有预定义大小的列表,您还可以使用:
List<Integer> arr = Arrays.asList(new Integer[10]);
答案 2 :(得分:39)
如果你想使用Collections.fill(list,obj);为了用重复的对象填充列表,你可以使用
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
该行将10次0复制到您的ArrayList
答案 3 :(得分:18)
ArrayList
的 容量与尺寸不同。 大小等于ArrayList
(以及任何其他List
实施中包含的元素数量。)
容量只是底层数组的长度,用于内部存储ArrayList
的元素,并且总是大于或等于大小列表中的强>。
在列表中调用set(index, element)
时,index
与列表元素的实际数量(=大小)相关(在代码中为零,因此抛出AIOOBE
),而不是数组长度(=容量)(这是ArrayList
特定的实现细节)。
set
方法对于所有List
实现都是通用的,例如LinkedList
,它实际上不是由数组实现的,而是作为链接的条目链。
修改:您实际使用的是add(index, element)
方法,而不是set(index, element)
,但此处的原则相同。
答案 4 :(得分:10)
如果要添加带索引的元素,可以使用数组。
String [] test = new String[length];
test[0] = "add";
答案 5 :(得分:9)
10是AL的初始容量,而不是大小(为0)。当你想要拥有大量元素时,你应该提到一些高值的初始容量,因为它可以避免在你不断添加元素时扩展容量的开销。
答案 6 :(得分:6)
我想你问题的确切答案是:
在ArrayList上设置初始大小会减少nr。内部存储器重新分配必须发生的时间。 该列表由数组支持。如果指定初始容量为0,则在第一次插入元素时,必须调整内部数组的大小。 如果您大致了解列表将包含多少元素,则设置初始容量将减少nr。使用列表时发生的内存重新分配。
答案 7 :(得分:1)
现在列表中没有元素,因此当它不存在时,您无法添加到列表的索引5。您将列表的容量与其当前大小混淆。
请致电:
arr.add(10)
将Integer添加到ArrayList
答案 8 :(得分:1)
虽然您的arraylist的容量为10,但真实列表中没有元素。 add方法用于将元素插入到真实列表中。由于它没有元素,因此不能将元素插入索引5。
答案 9 :(得分:1)
如果您想向ArrayList
添加10个项目,可以尝试:
for (int i = 0; i < 10; i++)
arr.add(i);
如果您已经声明了数组大小变量,那么您将使用变量size
而不是数字&#39; 10&#39;
答案 10 :(得分:1)
这可能有助于某人 -
ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
答案 11 :(得分:1)
这很晚,但是在 Java 8 之后,我个人发现使用Stream
API的以下方法更为简洁,可以替代the accepted answer。
例如,
Arrays.stream(new int[size]).boxed().collect(Collectors.toList())
其中size
是所需的List
大小,如果没有the disadvantage mentioned here,则List
中的所有元素都将初始化为0
。
(我进行了快速搜索,但在发布的任何答案中都没有看到stream
-请随时让我知道此答案是否多余,我可以将其删除)
答案 12 :(得分:0)
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);
}
/ *宣告arraylist的初始能力只不过是在内部节省转移时间;当我们在内部添加元素时,检查capasity以增加capasity,你可以将元素添加到0 index,然后是1,依此类推。 * /
答案 13 :(得分:0)
我遇到了类似的问题,仅知道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);
答案 14 :(得分:0)
我在Stream
上的2分钱。我认为最好使用
IntStream.generate(i -> MyClass.contruct())
.limit(INT_SIZE)
.collect(Collectors.toList());
可以灵活地放置任何初始值。
答案 15 :(得分:0)
贡献..
List <Destination\> destinations = Collections.nCopies(source.size(), Destination.class.newInstance());