我有以下代码:
ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0,5);
我得到一个索引越界错误,我不知道为什么。我已声明大小为10的ArrayList
。为什么会出现此错误?
答案 0 :(得分:7)
您声明了ArrayList
,其初始容量为10个元素,但您没有向此列表添加元素,即列表为空。 set
将替换现有元素,但由于列表中没有元素,因此抛出异常。
您必须先使用add
方法添加元素。
Initial capacity
表示列表内部维护的数组的开头大小为10。在向列表中添加更多元素时,此内部数组的大小可能会更改。
答案 1 :(得分:4)
查看ArrayList.set(int, E)
的JDK源代码提供了一个提示:您需要在列表中至少包含N
个元素才能调用set(N-1, E)
。
通过add()
方法添加您的元素。
答案 2 :(得分:3)
包含的初始数组指定为“10”,数组中的实际项目数为0。
要在第一个索引处添加“5”,只需执行arr.add(5)
传递给ArrayList构造函数的值是数组后备存储的初始容量。向超出此容量的点添加元素时,ArrayList将在内部分配一个大小的新存储阵列,并将项目复制到新的后备存储阵列。
答案 3 :(得分:2)
答案 4 :(得分:1)
您在构造函数中传递的内容只是支持列表的数组的初始容量。施工后清单仍然是空的。 此外,如果你想存储,你应该考虑使用通用列表,即只需要整数..
答案 5 :(得分:0)
使用arr.add(0.5)
。 set
方法将替换现有元素。
答案 6 :(得分:0)
set(int index,E element) 用指定的元素替换此列表中指定位置的元素。你应该使用add()
答案 7 :(得分:0)
答案 8 :(得分:0)
在构造函数中,您已指定初始容量。但是,列表的大小仍为0,因为您尚未添加任何元素。
来自ArrayList.set()
的文档:
IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; = size())。
答案 9 :(得分:0)
您已使用项数0
初始化了arraylist,这意味着您在该数组中只有1
个元素。然后在此数组中添加两个数字。