Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加到ArrayList时的IndexOutOfBoundsException_Java_Android_Arraylist_Indexoutofboundsexception - Fatal编程技术网

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(索引,对象)方法,但实际上是
.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);