有 Java 编程相关的问题?

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

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

代码是葡萄牙语的,很抱歉

我在这里读了另一个问题,所以抛出异常是因为我使用了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();
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

    在使用增强的for循环(这是您在内部循环中所做的)遍历该列表时,不能修改该列表

    for(final Iterator Iterator=program acesempresas.Iterator();迭代器。hasNext();)

    以及(最终课程AO progEmpresa:课程主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题主题)