调用java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
时,我的gettgin list.add(location, item);
异常为add方法调用了JavaDoc:
如果位置等于此List的大小,则添加该对象 最后。
我完全感到困惑,因为它还说IndexOutOfBoundsException
时应该抛出location < 0 || location > size()
,但即使在异常位置和大小相同的情况下也是如此。
编辑:我在这里复制粘贴完整的javadoc,看看是什么让我感到不舒服。
public abstract void add (int location, E object)
在API级别1中添加
将指定对象插入指定位置的此List中。该对象在指定位置的当前元素之前插入。如果位置等于此List的大小,则在末尾添加对象。如果该位置小于此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);
答案 0 :(得分:0)
Java中的数组和列表是0索引的。因此,如果您的尺寸为3,则您在0,1和2位置有物品。您的if条件应为
location < 0 || location >= size()
答案 1 :(得分:0)
你实际上是或者给出了一个错误的位置,基于非零或者可能只是错过了使用indext,请参阅java列表是基于0的所以如果大小为3则最后一个索引应该是2(0,1 ,2),只做其中一个:
list.add(location-1, item);
或
list.add(item);
你应该做得很好
答案 2 :(得分:0)
如果要将新对象放在第一个项目之前,则为:
list.add(0, item);
如果您希望新对象在第n个项目之前,那么它将是
list.add(n-1, item);
如果要插入最后一项,
list.add(item);
答案 3 :(得分:0)
当我发布我的方法时,我已经注意到了这个问题。无论出于何种原因,当我点击链接时,我的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);