我有一个ArrayList
被调用的块,通过使用迭代器进行迭代。在我调用当前迭代器的.remove()
方法之前,我必须删除列表中与被删除对象链接的另一个对象。尝试执行此操作会导致并发修改异常。你知道我怎么解决这个问题吗?示例代码:
for (Iterator<Block> iterator = Blocks.iterator(); iterator.hasNext();) {
Block block = (Block) iterator.next();
if (block.getX() == x && block.getY() == y) {
block.remove(); //This removes another block from this list but throws the error
iterator.remove();
}
}
答案 0 :(得分:1)
如果你只需要删除第一个匹配,那么最简单的解决方案是迭代列表以找到第一个匹配并将该匹配保存在可以在迭代器循环外部访问的变量中。然后只需打破循环并执行所需的清理(删除)
Block removeMe;
for (Iterator<Block> iterator = Blocks.iterator(); iterator.hasNext();) {
Block block = (Block) iterator.next();
if (block.getX() == x && block.getY() == y) {
removeMe = block;
iterator.remove();
break;
}
}
removeMe.remove();