Java 添加到ArrayList时的IndexOutOfBoundsException
我正在获取Java 添加到ArrayList时的IndexOutOfBoundsException,java,android,arraylist,indexoutofboundsexception,Java,Android,Arraylist,Indexoutofboundsexception,我正在获取java.lang.IndexOutOfBoundsException:索引3无效,大小为3调用list.add时出现异常(位置,项目)JavaDoc说明: 如果位置等于此列表的大小,则添加对象 最后 我完全糊涂了,因为它还说当locationsize()但即使在异常位置和大小相等时,也应该抛出IndexOutOfBoundsException 编辑:我在这里复制粘贴完整的javadoc,看看是什么让我不舒服 public-abstract-void-add(int-location,
java.lang.IndexOutOfBoundsException:索引3无效,大小为3
调用list.add时出现异常(位置,项目)JavaDoc说明:
如果位置等于此列表的大小,则添加对象
最后
我完全糊涂了,因为它还说当location<0 | | location>size()
但即使在异常位置和大小相等时,也应该抛出IndexOutOfBoundsException
编辑:我在这里复制粘贴完整的javadoc,看看是什么让我不舒服
public-abstract-void-add(int-location,E-object)
在API级别1中添加
在指定位置将指定对象插入此列表。将在指定位置的当前元素之前插入对象。如果位置等于此列表的大小,则对象将添加到末尾。如果该位置小于此列表的大小,则指定位置之外的所有元素都将向列表末尾移动一个位置
参数
- location—要插入的索引
- 对象-要添加的对象
投掷
- UnsupportedOperationException-如果不支持添加到此列表中
- ClassCastException-如果对象的类不适合此列表
- IllegalArgumentException-如果无法将对象添加到此列表中
- IndexOutOfBoundsException-如果位置<0 | |位置>大小()
编辑#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);
datenewdate=sourceDateFormatter.parse(newTime.getDate());
日期;
int insert=-1;
做{
插入++;
date=sourceDateFormatter.parse(list.get(insert.getDate());
}while(date.compareTo(newDate)<0);
列表。添加(插入,新时间);
Java中的数组和列表是0索引的。因此,如果您的尺寸为3,则在位置0、1和2有项目。你的情况应该是
location < 0 || location >= size()
位置<0 | |位置>=size()
实际上,如果您使用非零基索引或给出了错误的位置,或者可能根本没有使用索引,请参见java列表是基于0的,因此如果大小为3,则最后一个索引应为2(0,1,2),只需执行以下操作之一:
list.add(location-1, item);
或
如果您想将新对象放在第一项之前,您应该做得很好,它应该是:
list.add(0, item);
如果希望新对象位于第n项之前,则它将位于
list.add(n-1, item);
如果要作为最后一项插入
list.add(item);
当我发布我的方法时,我注意到了这个问题。无论出于何种原因,我的logcat指向.add(索引,对象)当我点击链接时使用code>方法,但实际上是.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);
datenewdate=sourceDateFormatter.parse(newTime.getDate());
日期;
int insert=0;
做{
date=sourceDateFormatter.parse(list.get(insert.getDate());
}while(date.compareTo(newDate)<0&&++insert
如果大小为3,则最大元素位于位置2。如果要附加列表
,则无需指定索引
,只需调用列表。添加(项目)代码>@Xoce웃Пepeúpa如果我将它添加到pos2,pos2处的元素将被推到pos3,这不是我想要的。我想将其作为最后一个元素添加。@ElliottFrisch此添加位于一个循环中,该循环确定新项在列表中的位置,这就是我希望这样做的原因。唯一的问题是,当我想将它添加到列表的末尾时,它会抛出这个异常,正如javadoc所说的。调用list.add(list.size(),newitem)
时没有问题,其中list
是ArrayList实例。这不是我的if条件,我从.add方法的javadoc复制粘贴了它。如果我将其添加到位置2,pos2中的对象将被推送到pos3代码>应将项目添加为最后一项。检查我的编辑问题。“列表”的确切类别是什么?列表列表=新的ArrayList();列表=新的ArrayList();列表。添加(“AAA”);列表。添加(1,“BBB”);它可以工作,因为我使用了java.util.ArrayList和java.util.List
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);