java ArrayList在迭代时删除对象

时间:2014-05-22 22:41:02

标签: java arraylist iterator

我在一个arraylist上运行迭代器,并且在条件为真时尝试删除一个项目。

我有以下代码:

String item = (String) model.getElementAt(selectedIndices[i]);
Iterator it = p.eggMoves.iterator();
while(it.hasNext())
{
    String text = (String) it.next();
    if ( text.equals(item) )
    {
        it.remove();
        p.eggMoves.remove(selectedIndices[i]);
        model.removeElementAt(selectedIndices[i]);
    }
}

现在这段代码工作正常,该项目从p对象和jlist中删除,但它会抛出一个" ConcurrentModificationException" it.next()行的异常。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:12)

只需在迭代时使用it.remove()删除该项目。

以下行导致问题

p.eggMoves.remove(selectedIndices[i]);

您想要通过一次又一次删除相同的项目(即索引i)来做什么?

答案 1 :(得分:4)

无需同时拨打it.remove();p.eggMoves.remove(selectedIndices[i]);。对it.remove();的调用将从p.eggMoves删除当前项目。

删除对p.eggMoves.remove(selectedIndices[i]);的调用,它应该可以正常工作。