风在路上 风在路上
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)

风

摸鱼
首页
导航站
  • Java-Se

    • Java基础
  • Java-Se进阶-多线程

    • 多线程
  • Java-Se进阶-java8新特性

    • java8新特性
  • Java-ee

    • JavaWeb
  • Java虚拟机

    • JVM
  • golang基础

    • golang基础
  • golang框架

    • gin
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • Redis
    • ElasticSearch
    • MongoDB
  • ORM

    • MyBatis
    • MyBatis-Plus
  • Spring

    • Spring
  • SpringMVC

    • SpringMVC1
    • SpringMVC2
  • SpringCloud

    • SpringCloud
  • 中间件

    • RabbitMQ
    • Dubbo
  • 秒杀项目
  • Git
  • Linux
  • Docker
  • JWT
  • 面试
  • 刷题
开发问题😈
设计模式
关于💕
归档🕛
GitHub (opens new window)
  • 问题
  • SpringBoot相关
  • java基础相关
    • log4j日志配置
    • SpringBoot封装starter并上传到maven仓库
    • SpringBoot整合Validation
    • 开发问题
    zdk
    2022-01-06
    目录

    java基础相关

    Table of Contents generated with DocToc (opens new window)

    • 使用foreach遍历元素,并在期间删除元素时

    # 使用foreach遍历元素,并在期间删除元素时

    @Test
        public void testError(){
            List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "e", "f"));
            for (String s : list) {
                if (s.equals("c")){
                    list.remove(s);
                    System.out.println("删除了:"+s);
                }
                System.out.println("删除后的list:"+list);
            }
            System.out.println("list = " + list);
        }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    会出现:

    image-20211101133138303

    原因是for each的底层其实也是用迭代器实现的,在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除,就会抛出 java.util.ConcurrentModificationException异常。

    正确的方式应该是:直接使用iterator

    @Test
        public void testRight(){
            List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "e", "f"));
            Iterator<String> iterator = list.iterator();
            while (iterator.hasNext()){
                String s = iterator.next();
                if (s.equals("c")){
                    iterator.remove();
                    System.out.println("删除了:"+s);
                }
            }
            System.out.println("list = " + list);
        }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    在 GitHub 上编辑此页 (opens new window)
    #question#java-se
    最后更新: 2022/10/04, 16:10:00
    SpringBoot相关
    log4j日志配置

    ← SpringBoot相关 log4j日志配置→

    Theme by Vdoing | Copyright © 2022-2025 zdk | notes
    湘ICP备2022001117号-1
    川公网安备 51142102511562号
    本网站由 提供CDN加速/云存储服务
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式