簡體   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