ConcurrentModificationException 集合并发修改异常 解决

简介: import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * 问题?
 *         有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
 * 
 *     ConcurrentModificationException: 但方法监测到对象的并发修改,但不允许这种修改时,抛出此异常。
 * 产生的原因:
 *             迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器都不知道,所以就报错了,这个错叫并发修改异常。
 *             其实这个问题的描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
 * 
 * 如何解决呢?
 *             A:迭代器迭代元素,迭代器修改元素
 *                 元素时跟在刚才迭代的额元素后面的
 *             B:集合遍历元素,集合修改元素(普通for)
 *                 元素时最后添加的
 *
 *
 */
public class ListIteratorDemo2 {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("hello");
        list.add("world");
        list.add("java");
        
//        错误的方式:迭代器迭代元素,集合修改元素,迭代器不知道集合的修改,抛出了并发修改异常。
//        Iterator it=list.iterator();
//        while(it.hasNext()){
//            String s= (String)it.next();
//            if("world".equals(s)){
//                list.add("javaee");
//            }
//        }
        
        //正确的方式一: 迭代器迭代元素,迭代器修改元素 
//        ListIterator lit=list.listIterator();
//        while(lit.hasNext()){
//            String s=(String)lit.next();
//            if("world".equals(s)){
//                lit.add("javaee");
//            }
//        }
        
        
        //正确的方式二:集合遍历元素,集合修改元素(普通for)
        for(int i=0;i<list.size();i++){
            String s=(String)list.get(i);
            if("world".equals(s)){
                list.add("javaee");
            }
        }
        
        System.out.println("list: "+list);
    }
}
开始做,坚持做,重复做
相关文章
|
15天前
|
负载均衡 算法 Java
【SpringCloud(4)】OpenFeign客户端:OpenFeign服务绑定;调用服务接口;Feign和OpenFeign
Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,十七支持了SpringMVC标准注解和HttpMessageConverters。 Feign可用于Eureka和Ribbon组合使用以支持负载均衡
422 137
|
JSON 前端开发 Java
Spring WebFlux使用函数式编程模型构建异步非阻塞服务
Spring WebFlux使用函数式编程模型构建异步非阻塞服务
355 0
|
缓存 Java Nacos
一文带你理解@RefreshScope注解实现动态刷新原理
一文带你理解@RefreshScope注解实现动态刷新原理
1113 0
一文带你理解@RefreshScope注解实现动态刷新原理
|
SQL 存储 关系型数据库
Hologres SQL 查询优化技巧
【9月更文第1天】随着大数据处理的需求日益增长,如何高效地进行数据查询和分析变得尤为重要。Hologres 是阿里云推出的一款实时数仓产品,它基于 PostgreSQL 构建,并针对在线分析处理(OLAP)场景进行了优化,支持实时数据写入与查询,能够实现毫秒级的查询响应。本文将探讨在使用 Hologres 时如何编写高效的 SQL 查询,并介绍一些特定于 Hologres 的优化技巧。
674 2
|
11月前
|
SQL 监控 数据可视化
完全开源!国内首个完全开源JAVA企业级低代码平台
JeeLowCode 是一款专为企业打造的 Java 企业级低代码开发平台,通过五大核心引擎(SQL、功能、模板、图表、切面)和四大服务体系(开发、设计、图表、模板),简化开发流程,降低技术门槛,提高研发效率。平台支持多端适配、国际化、丰富的组件库和灵活的布局设计,适用于 OA、ERP、IoT 等多种管理信息系统,帮助企业快速实现数字化转型。
完全开源!国内首个完全开源JAVA企业级低代码平台
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
JSON Java 测试技术
一篇文章讲明白JGit学习
一篇文章讲明白JGit学习
557 0
|
Java Spring
深入理解Spring Boot中的Profile配置
深入理解Spring Boot中的Profile配置
|
缓存 Java 微服务
Spring Cloud中@RefreshScope实现动态刷新的原理
Spring Cloud中@RefreshScope实现动态刷新的原理
|
负载均衡 前端开发 Java
第六章 Spring Cloud 之 OpenFeign
第六章 Spring Cloud 之 OpenFeign
238 0