![](/img/trans.png)
[英]IndexOutOfBoundsException when adding to ArrayList at index
[英]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的大小,則在末尾添加對象。 如果該位置小於此列表的大小,則超出指定位置的所有元素都將向列表末尾移動一個位置。
參量
投擲
編輯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.