ArrayList超出范围异常

时间:2012-01-17 13:56:25

标签: java arraylist

我有以下代码:

ArrayList<Integer> arr = new ArrayList<Integer>(10);
arr.set(0,5);

我得到一个索引越界错误,我不知道为什么。我已声明大小为10的ArrayList。为什么会出现此错误?

10 个答案:

答案 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)

来自documentation

  

构造具有指定初始容量的列表。

(强调我的)

答案 4 :(得分:1)

您在构造函数中传递的内容只是支持列表的数组的初始容量。施工后清单仍然是空的。 此外,如果你想存储,你应该考虑使用通用列表,即只需要整数..

答案 5 :(得分:0)

使用arr.add(0.5)set方法将替换现有元素。

答案 6 :(得分:0)

set(int index,E element)           用指定的元素替换此列表中指定位置的元素。你应该使用add()

答案 7 :(得分:0)

如果你看一下它说的javadoc注释:

  

使用指定的元素替换此列表中指定位置的元素。

在替换之前需要一个元素。试试

arr.add(5);

只添加一个元素。

答案 8 :(得分:0)

在构造函数中,您已指定初始容量。但是,列表的大小仍为0,因为您尚未添加任何元素。

来自ArrayList.set()的文档:

  

IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; = size())。

答案 9 :(得分:0)

您已使用项数0初始化了arraylist,这意味着您在该数组中只有1个元素。然后在此数组中添加两个数字。