zoukankan      html  css  js  c++  java
  • ConcurrentModificationException 集合并发修改异常 解决

    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);
        }
    }
  • 相关阅读:
    java多线程编程核心技术——第七章补漏拾遗
    java多线程编程核心技术——第六章总结
    第六章:单例模式与多线程序言
    java多线程编程核心技术——第五章总结
    第五章——定时器Timer序言
    我的日志app企划书1.0版本
    du -sh
    安装saltstack使用的shell
    Neo4j社区版配置文件
    挂载磁盘
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4280091.html
Copyright © 2011-2022 走看看