为了账号安全,请及时绑定邮箱和手机立即绑定

在ArrayList中的foreach循环内添加时,出现ConcurrentModification

在ArrayList中的foreach循环内添加时,出现ConcurrentModification

喵喔喔 2019-11-18 18:29:19
我正在尝试通过数组列表使用foreach循环,但是当我使用它时,它会给我带来错误,但是当我使用普通的for循环时,它可以正常工作,这可能是什么问题?代码在这里:for (Pair p2 : R) {    if ((p2.getFirstElm() == p.getSecondElm()) && (p2.getFirstElm() != p2.getSecondElm()))         R.add(new Pair (p.getFirstElm(), p2.getSecondElm()));    else if ((p2.getSecondElm() == p.getFirstElm()) && (p2.getFirstElm() != p2.getSecondElm()))         R.add(new Pair (p2.getFirstElm(), p.getSecondElm()));    // else    // There are no transitive pairs in R.}这是无效的循环,这是有效的循环:for (int i = 0; i < R.size(); i++) {    if ((R.get(i).getFirstElm() == p.getSecondElm()) && (R.get(i).getFirstElm() != R.get(i).getSecondElm()))         R.add(new Pair (p.getFirstElm(), R.get(i).getSecondElm()));    else if ((R.get(i).getSecondElm() == p.getFirstElm()) && (R.get(i).getFirstElm() != R.get(i).getSecondElm()))         R.add(new Pair (R.get(i).getFirstElm(), p.getSecondElm()));    //else    //  There are no transitive pairs in R.}使用foreach循环时出现的错误是:Exception in thread "main" java.util.ConcurrentModificationException    at java.util.AbstractList$Itr.checkForComodification(Unknown Source)    at java.util.AbstractList$Itr.next(Unknown Source)      at set.problem.fourth.PoSet.makeTransitive(PoSet.java:145)      at set.problem.fourth.PoSet.addToR(PoSet.java:87)    at set.problem.fourth.PoSetDriver.typicalTesting(PoSetDriver.java:35)    at set.problem.fourth.PoSetDriver.main(PoSetDriver.java:13)
查看完整描述

3 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

引擎盖下,该for-each循环在Java使用的Iterator用于遍历集合(请参阅本文章进行了详细说明。)和迭代器都将抛出ConcurrentModificationException,如果你修改集合在遍历它,看到这个帖子。


查看完整回答
反对 回复 2019-11-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

问题是您正在循环的第一行中执行R.add()。


在第一种情况下,您需要向arraylist打开一个迭代器。当您执行添加操作然后尝试再次进行迭代时,迭代器会注意到您下面的数据结构已更改。


对于for look,每次添加一个新元素都不会出现并发修改问题,尽管随着添加更多元素而大小会发生变化。


要解决此问题,您可能需要添加到一个临时位置,然后在循环后添加该位置,或者制作一份初始数据的副本并添加到原始位置。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 676 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信