加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 不修改列表但仍然得到ConcurrentModificationException

发布时间:2020-12-15 05:19:16 所属栏目:Java 来源:网络整理
导读:在您盯着另一个ConcurrentModificationException问题之前,这不是典型的ConcurrentModificationException问题. 我理解ConcurrentModificationExceptions但我不明白为什么我在下面的代码中得到一个.在下面的’for’中,似乎迭代器继续存在于for循环之外. (在ecl
在您盯着另一个ConcurrentModificationException问题之前,这不是典型的ConcurrentModificationException问题.

我理解ConcurrentModificationExceptions但我不明白为什么我在下面的代码中得到一个.在下面的’for’中,似乎迭代器继续存在于for循环之外. (在eclipse中使用调试器,我可以看到迭代器在重新启动循环时会保留其jList的modCount值.)

public class ForEachTest {
  public static void main(String[] args) {
    List<Integer> zList = new LinkedList<Integer>();
    List<Integer> jList = new LinkedList<Integer>();
    jList.add(1);

    while (true) {
      for (Integer j : jList) {
        zList.add(17);
        System.out.println(j);
      }
      jList = zList;
    }
  }
}

起初我认为这可能是语法糖的问题,但我使用显式迭代器重写了它并运行了相同的行为.

最后,我能够通过将for分成一段时间来重写它,并进行单独的初始化步骤,所以我不是只想让它重新编写才能使它工作.但我想知道这里显示的问题是什么问题.如果可能的话,我更愿意使用for-each语法.

解决方法

看看你的循环:

while (true) {
  for (Integer j : jList) {
    zList.add(17);
    System.out.println(j);
  }
  jList = zList;
}

在外部循环的第二次迭代中,jList和zList引用相同的列表(由于jList = zList;语句)…所以当你在内部循环中添加到zList时,你正在修改列表你是迭代.砰.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读