繁体   English   中英

使用 .add(index, element) 时在 ArrayList 中获取 IndexOutOfBoundsException

[英]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.

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