我在一个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()行的异常。
我该如何解决这个问题?
答案 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]);
的调用,它应该可以正常工作。