![](/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.