最近在使用 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
最佳答案
.add()方法在给定位置插入元素并相应地移动另一个元素
要覆盖特定索引处的值,您必须使用.set(position, value)
尝试设置方法..
list.add(0,"x");
list.add(1,"y");
list.set(1,"SECONDITEM");
list.set(0,"FIRSTITEM");
现在它将返回仅有的两个值。
关于java - ArrayList索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21507552/