使用迭代器进行遍历时不能进行元素的任何修改

记录一下

使用迭代器进行遍历时不能进行元素的任何修改

  ArrayList<String> list = new ArrayList<>();
        list.add("一");
        list.add("二");
        list.add("光");
        list.add("华");
//        遍历器
        Iterator<String> iterator = list.iterator();
//        用于存放删除的集合
        ArrayList<String> list1 = new ArrayList<>();

        while(iterator.hasNext()){
            String next = iterator.next();
            if ("二".equals(next)){
                list.remove(next);
            }
            System.out.println(next);
        }

不然就会发生并发错误

原因可以查看源码,就是点击报错处的ArrayList$Itr.checkForComodification(ArrayList.java:1095)

可以看到抛出异常处,然后可知在进行deBug断点的时候发现遍历集合时修改元素会引起modCunt的变化因此会抛出此异常

解决方法有两种

1》建立一个新的集合,然后将不需要的元素添加到此集合中,遍历结束后进行删除即可

 public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("一");
        list.add("二");
        list.add("光");
        list.add("华");
//        遍历器
        Iterator<String> iterator = list.iterator();
//        用于存放删除的集合
        ArrayList<String> list1 = new ArrayList<>();

        while(iterator.hasNext()){
            String next = iterator.next();
            if ("二".equals(next)){
                list1.add(next);
            }
            System.out.println(next);
        }
        boolean b = list.removeAll(list1);
        System.out.println(list);
        System.out.println(list1);

2》直接进行for循环即可,使用for循环的时候可以在遍历时进行修改

 for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            if ("华".equals(s)){
                list.remove(s);
            }
            System.out.println(s);
        }
        System.out.println(list);

最后就是

使用forearch,他如果是遍历的是集合,那么就相当于还是在使用迭代器进行遍历,不能在遍历时修改元素

但是如果遍历的是数组,那么是根据索引进行遍历的

相关推荐

  1. 使用

    2024-05-12 18:46:07       5 阅读
  2. C#

    2024-05-12 18:46:07       51 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 18:46:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 18:46:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 18:46:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 18:46:07       20 阅读

热门阅读

  1. docker配置GPU支持

    2024-05-12 18:46:07       9 阅读
  2. 计算机网络实验——学习记录七(IP协议)

    2024-05-12 18:46:07       9 阅读
  3. AES对称加密算法原理、C++代码示例

    2024-05-12 18:46:07       9 阅读
  4. Android 面试常见知识点总结(持续更)

    2024-05-12 18:46:07       13 阅读
  5. 知网相关文章采集

    2024-05-12 18:46:07       13 阅读
  6. [力扣题解]53. 最大子数组和

    2024-05-12 18:46:07       11 阅读
  7. 哈希表第5/9题--两数之和

    2024-05-12 18:46:07       9 阅读
  8. let和const命令

    2024-05-12 18:46:07       12 阅读