【发布时间】:2014-02-02 05:52:37
【问题描述】:
最近在使用 arrayList 时,我发现了一个奇怪的问题。我想在arraylist中保留2个元素,并希望将object1保留在元素0中,将object2保留在element1中。
我正在循环决定这个。
当它恰好添加第一个元素时,它会抛出 indexOutofBounds。根据 java doc,因为索引大于大小,所以这样做。
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(1,"SECONDITEM"); // throwing due to size is not set
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
然后我尝试将其他项目设置为 0,1 元素中的占位符并尝试做同样的事情
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(0,"x");
list.add(1,"y");
list.add(1,"SECONDITEM");
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
Output:
Position 0 :FIRSTITEM
Position 1 :x
Position 2 :SECONDITEM
Position 3 :y
如何解决这个问题。我发现的一种方法是删除索引中的元素并添加元素。有没有更好的选择。
public static void main(String[] args)
{
ArrayList<String> list = new ArrayList<String>();
list.add(0,"x");
list.add(1,"y");
list.remove(1);
list.add(1,"SECONDITEM");
list.remove(0);
list.add(0,"FIRSTITEM");
int postn=0;
for(String item:list){
System.out.println("Position "+postn+" :"+item);
postn++;
}
}
Position 0 :FIRSTITEM
Position 1 :SECONDITEM
【问题讨论】:
-
呃,不要使用
ArrayList? -
创建您自己的 LinkdList 类来处理这种情况。或者在执行任何特定于索引的添加之前,向 ArrayList 添加尽可能多的默认值
-
我有同样的问题,为什么?
标签: java arraylist replace indexoutofboundsexception