有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java删除一个迭代器,该迭代器删除同一列表中的另一个元素

我有一个名为blocks的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();
    }
}

共 (1) 个答案

  1. # 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();