java - 为什么使用迭代器从列表中删除元素会导致 ConcurrentModificationException?

标签 java

代码是葡萄牙语的,对此我很抱歉。

我在这里读到另一个问题,因为我正在使用progSelecionada.remove(),所以抛出了异常,所以我更改为iterator.remove()但错误仍然存​​在。

有人可以向我解释一下我可能做错了什么吗?

final List<Programacao> programacoesASeremRemovidas = new ArrayList<Programacao>(
                this.programacoesDaEscala.size());
programacoesASeremRemovidas.addAll(this.programacoesDaEscala);

final List<Programacao> programacoesEmpresas = Cache.getInstance().getProgramacoes(
                this.empresasSelecionadas);
for (final Iterator<Programacao> iterator = programacoesEmpresas.iterator(); iterator.hasNext();)
{
    final Programacao progSelecionada = iterator.next();

    for (final Programacao progEmpresa : programacoesEmpresas)
    {
        if (progSelecionada.getId() == progEmpresa.getId())
        {
           iterator.remove();
        }
    }
}

最佳答案

你可能有一个错误,因为你的两个循环都在同一个列表programacoesEmpresas上迭代,所以即使你没有得到异常,你也只需从列表中删除所有对象(假设您没有将字符串与 == 进行比较 - 我不知道 getId() 的类型是什么)。

在使用增强的 for 循环迭代该列表时无法修改该列表(这是您在内部循环中所做的事情)。

for (final Iterator iterator = programacoesEmpresas.iterator(); iterator.hasNext();)

以及(最终 Programacao progEmpresa :programacoesEmpresas)

关于java - 为什么使用迭代器从列表中删除元素会导致 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291007/

相关文章:

java:验证 GUI 中的所有文本字段是否已完成

java - 使用 JTable+focusLost() 错误显示数据

java - 在 Android 上将蒙版应用于 EditText 的最佳方法是什么?

java - 代码优化: Sum integer values for specific string,

java - 保存时 hibernate 超时

java - 客户端应该具有与服务器相同的 keystore 吗?

java - 我可以将 jar 添加到 Maven 2 构建类路径而不安装它们吗?

Java,我不断收到 StringIndexOutOfboundsException

java - 在 Spring boot 中分析特定的自定义属性文件

java - @Transactional proxyTargetClass 和 @Inherited