从ArrayList中删除java.lang.IndexOutOfBoundsException?

时间:2011-10-04 09:56:30

标签: java

我正在尝试从ArrayList中删除一个对象,我的代码是

ArrayList myArrayList=new ArrayList();

for(int index=0;index<20;index++){
    myArrayList.add(index);
}

for(int removeIndex=0;removeIndex<=mArrayList;removeIndex++){
        myArrayList.remove(removeIndex);
}

它正在给java.lang.IndexOutOfBoundsException。如何从ArrayList中删除多个对象?

7 个答案:

答案 0 :(得分:6)

当然,只要删除第0个项目,最后一个项目现在是第18个,因为这些项目已重新编制索引。

您可以使用多种技巧,例如,从最后开始删除。或者删除第0项,直到数组为空(或直到您删除了一些预定义数量的项目)。

代码:

for(int index = mArrayList.size() - 1; removeIndex >= 0; removeIndex--) {
    myArrayList.remove(removeIndex);
}

for(int nremoved = mArrayList.size() - 1; nremoved >= 0; nremoved--) {
    myArrayList.remove(0);
}

如果您要删除所有项目,您也可以考虑使用clear()

如果要从列表中删除多个位置,可以尝试以下操作:

Collections.sort(positions); // needed if not already sorted
for (int i = positions.size() - 1; i >= 0; i--)
    myArrayList.remove(positions.get(i));

答案 1 :(得分:2)

List#clear()将删除所有元素。

答案 2 :(得分:0)

您将removeIndexArrayList本身进行比较,而不是ArrayList.size()。此外,您应该在比较中使用小于(<)而不是小于或等于(<=),因为使用&lt;导致额外的循环导致indexOutOfBoundsException

此外,开始在ArrayList的末尾而不是在开头删除,以避免重新索引元素,这也可能导致indexOutOfBoundsException。 (不是在这种情况下,因为你要比较每个循环的Array.size()。相反,你正在删除每一个项目,正如Vlad也提到的那样。)

答案 3 :(得分:0)

你必须检查'&lt;'在删除时。

ArrayList myArrayList = new ArrayList();

        for(int index=0;index<20;index++){
            myArrayList.add(index);
        }

        for(int removeIndex=0;removeIndex<myArrayList.size();removeIndex++){
                myArrayList.remove(removeIndex);
        }

答案 4 :(得分:0)

当您从ArrayList中删除元素时,其所有后续元素都会将其索引减少一个。

请参阅 public ArrayList.remove(int index)

答案 5 :(得分:0)

如果你需要从Array中删除所有元素,如果可能的话,那么更好的是

myArrayList = new ArrayList();

和内部循环你必须以这种方式重置数组,因为clear()removeAll()不起作用

答案 6 :(得分:0)

以最常见的方式使用Iterator:

final Iterator<? extends T> it = collection.iterator();
while ( it.hasNext() ) {
    T t = it.next();
    if (isNeedToRemove(t)) {
        it.remove();
    }
}