这是我的代码,当我删除元素时,我获得了ConcurrentModificationException
。我不明白为什么itrGrupo1
会因删除itrGrupo2
中的元素而受到影响。
当第二个完成时,{:1}}发生异常。
Instancia inst1=(Instancia) itrGrupo1.next()
答案 0 :(得分:0)
由于以下几行存在问题:
List grupo1=new ArrayList();
List grupo2=new ArrayList();
grupo1=(List) lstPrimeraAgrupacion.get(i);
grupo2=(List) lstPrimeraAgrupacion.get(i);
此前两行创建了两个新的ArrayList
,但跟在它们后面的行会使grupo1
和grupo2
指向相同的现有列表。我认为这是grupo2
所需要的,因为您正在修改它,看起来此代码所需的效果是修改lstPrimeraAgrupacion
的{{1}}子列表。 (我假设i
是lstPrimeraAgrupacion
,或List<List<Instancia>>
个对象的子列表。)
代码正文的作用是查看Instancia
与条件匹配的所有元素,然后将其从grupo1
中删除。但是,如果这两个变量引用相同的grupo2
对象,那么修改List<Instancia>
也会改变grupo2
上的迭代器可以访问的内容,从而可能使其处于破坏状态(这就是为什么你有例外)。
现在,有更好的方法来解决迭代列表和删除元素的问题,但是您设计代码的方式,影响最小的解决方案是简单地将元素复制到新的{ {1}},并将其用作旧列表的快照,同时根据需要从实际列表中删除元素。为此,您可以将以上代码更改为以下内容:
grupo1