繁体   English   中英

ArrayList 越界异常

[英]ArrayList out of bounds exception

我有以下代码:

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

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

您声明了一个ArrayList ,其初始容量为 10 个元素,但您没有向此列表添加元素,即列表为空。 set将替换现有元素,但由于列表中没有元素,因此抛出异常。 您必须在使用add方法之前添加元素。

Initial capacity是指列表内部维护的数组一开始大小为10。 在向列表中添加更多元素时,此内部数组的大小可能会发生变化。

查看ArrayList.set(int, E) JDK 源代码给出了一个提示:在调用set(N-1, E)之前,您的列表中至少需要有N元素。

通过add()方法添加元素。

包含的初始数组指定为“10”,数组中的实际项目数为 0。

要在第一个索引处添加“5”,只需执行 arr.add(5)

传递给 ArrayList 构造函数的值是数组后备存储的初始容量。 当您向超出此容量的点添加元素时,ArrayList 将在内部分配一个新的存储数组,并将项目复制到新的后备存储数组。

文档

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

(强调我的)

您在构造函数中传递的只是支持列表的数组的初始容量。 该列表在构建后仍然是空的。 此外,如果您想存储即仅整数,您应该考虑使用通用列表。

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

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

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

如果您查看javadoc说明,它说:

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

您需要一个元素才能替换一个元素。 尝试

arr.add(5);

只需添加一个元素。

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

ArrayList.set()的文档中:

IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM