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

时间:2014-08-13 16:05:57

标签: 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(); } } } ,但错误仍然存​​在。

有人可以向我解释我的错误吗?

{{1}}

1 个答案:

答案 0 :(得分:2)

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

使用增强的for循环(在内部循环中执行此操作)迭代时,您无法修改该列表。

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

和(最终Programacao progEmpresa: programacoesEmpresas