【发布时间】:2016-03-21 17:03:52
【问题描述】:
我在为 add 方法调用 list.add(location, item); JavaDoc 时遇到 java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3 异常说:
如果位置等于这个List的大小,则添加对象 最后。
我完全糊涂了,因为它还说当location < 0 || location > size() 时应该抛出IndexOutOfBoundsException,但即使在异常位置和大小相等时也是如此。
编辑:我在这里复制粘贴完整的 javadoc,看看是什么让我对此感到不舒服。
public abstract void add (int location, E object)
在 API 级别 1 中添加
在指定位置将指定对象插入到此列表中。对象被插入到指定位置的当前元素之前。如果位置等于此列表的大小,则将对象添加到末尾。如果位置小于此 List 的大小,则超出指定位置的所有元素都将向 List 末尾移动一个位置。
参数
- location - 要插入的索引。
- object - 要添加的对象。
投掷
- UnsupportedOperationException - 如果不支持添加到此列表。
- ClassCastException - 如果对象的类不适合此列表。
- IllegalArgumentException - 如果无法将对象添加到此列表中。
- IndexOutOfBoundsException - 如果位置 尺寸()
编辑#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);
【问题讨论】:
-
如果大小为 3,则最大元素位于 pos 2
-
如果要附加
List,则无需指定index,只需调用list.add(item); -
@Xoce웃Пepeúpa 如果我将它添加到 pos2,则 pos2 处的元素将被推送到 pos3,这不是我想要的。我想将它添加为最后一个元素。
-
@ElliottFrisch 此添加位于一个循环内,该循环确定新项目应在列表中的哪个位置,这就是我想要它的原因。唯一的问题是,当我想将它添加到列表的末尾时,它会抛出这个异常,正如 javadoc 所说的那样。
-
向我们展示您正在使用的实际代码。当我调用
list.add( list.size(), newitem )时我没有问题,其中list是一个 ArrayList 实例。
标签: java android arraylist indexoutofboundsexception