簡體   English   中英

添加到ArrayList時出現IndexOutOfBoundsException

[英]IndexOutOfBoundsException when adding to ArrayList

我是gettgin java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3調用list.add(location, item);java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3異常list.add(location, item); 用於添加方法的JavaDoc表示:

如果位置等於此List的大小,則在末尾添加對象。

我完全感到困惑,因為它還說當location < 0 || location > size()時應該拋出IndexOutOfBoundsException location < 0 || location > size()但即使在例外情況下,位置和大小也相同。

編輯:我在這里復制粘貼完整的javadoc,以了解是什么讓我對此感到不舒服。

public abstract void add (int location, E object)

在API級別1中添加

將指定對象插入此列表中的指定位置。 該對象將在指定位置的當前元素之前插入。 如果位置等於此List的大小,則在末尾添加對象。 如果該位置小於此列表的大小,則超出指定位置的所有元素都將向列表末尾移動一個位置。

參量

  • location-要插入的索引。
  • object-要添加的對象。

投擲

  • UnsupportedOperationException-如果不支持添加到此列表。
  • ClassCastException-如果對象的類不適用於此List。
  • IllegalArgumentException-如果無法將對象添加到此List中。
  • IndexOutOfBoundsException-如果位置<0 || 位置> size()

編輯2 :要求的實際代碼:

Date newDate = sourceDateFormatter.parse(newTime.getDate());
Date date;
int insert = -1;
do {
    insert++;
    date = sourceDateFormatter.parse(list.get(insert).getDate());
} while(date.compareTo(newDate) < 0);

list.add(insert, newTime);

Java中的數組和列表的索引為0。 因此,如果您的尺寸為3,則在0、1和2位置有物品。if條件應為

location < 0 || location >= size()

好吧,您實際上是在錯誤的位置,或者給出了一個基於非零的錯誤位置,或者可能根本就沒有使用indext,請參閱java列表是基於0的,所以如果大小為3,則最后一個索引應該為2(0,1,2) ,只需執行以下一項操作:

list.add(location-1, item);

要么

list.add(item);

你應該做得很好

如果要將新對象放在第一項之前,它將是:

list.add(0, item);

如果您希望新對象在第n個項目之前,

list.add(n-1, item);

如果您想插入作為最后一項,

list.add(item);

當我發布方法時,我已經注意到了問題。 無論出於什么原因,我的logcat都指向.add(index, object); 當我單擊鏈接時的方法,但實際上是.get(index); 拋出異常,這完全是有道理的。

進行了一些調整,現在此代碼可以按預期工作:

Date newDate = sourceDateFormatter.parse(newTime.getDate());
Date date;
int insert = 0;
do {
    date = sourceDateFormatter.parse(list.get(insert).getDate());
} while(date.compareTo(newDate) < 0 && ++insert < list.size());

list.add(insert, newTime);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM