![](/img/trans.png)
[英]Getting "IndexOutOfBoundsException: Index 20 out of bounds for length 4" while using for-each loop with ArrayList of integers
[英]Getting IndexOutOfBoundsException in ArrayList while using .add(index, element)
我正在使用list.add(index, element)
函数将元素插入到 ArrayList 中,其中索引不按顺序排列。
例如,首先我调用list.add(5, element5)
然后list.add(3, element3)
我收到异常java.lang.IndexOutOfBoundsException: Invalid index 5, size is 0
异常。
请告诉我哪里做错了,我该如何解决这个问题。
您不能将元素添加到尚不存在的索引。 一般来说,正如 Japhei 所说,您只能将元素添加到小于或等于数组长度的索引。 这意味着,如果您的 ArrayList 仍然为空,则只能在索引 0 处添加元素或不指定索引(这只会将其添加到末尾)。
你想要做的是用空元素初始化你的 ArrayList 。 我通常根据数组类型(或空元素)对整数或空字符串使用无意义的值,如 0 或 -1,然后再填充它们。
但是如果你知道你有多少元素,或者你需要什么数组大小,为什么不直接使用普通数组呢? 那将是正确的方法。
问题是您的ArrayList
是空的,因此插入(通过add(int index, E element)
失败。
考虑使用add(E element)
( documentation ) 将元素添加到列表的末尾。
所以可能发生的是,您在创建所述列表时为列表定义了大小。 根据您的错误消息,这将是 0。在大小为 0 的列表中,您不能将第 5 或第 3 位置设置为任何值,因为它们不存在。 如果您要添加定义变量“list”的行,我们可以进一步帮助您!
您不能添加到不在列表范围内的索引:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index >= size())
请参阅 Java 文档: https ://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-int-E-
您只能使用现有的索引或比上一个现有索引大一个的索引。 否则你会有一些没有元素的地方。 如果您需要固定长度来将元素存储在指定位置,请尝试使用空条目填充 List 之前或使用数组:
MyElement[] myArray = new MyElement[theLengthOfMyArray];
myArray[5] = elementXY;
或者用空元素填充一个列表( 这里显示):
List<MyElement> myList = new ArrayList<>();
for (int i = 0; i < theTargetLengthOfMyList; i++) {
myList.add(null);
}
myList.set(5, elementXY);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.