zoukankan      html  css  js  c++  java
  • java.util.ConcurrentModificationException异常

    java.util.ConcurrentModificationException异常产生原因:

      java在使用集合类迭代器Iterator时(包括for...:...),同时执行了remove等改变迭代结果的操作。就会导致这个冲突修改异常

    解决方案:

      (1)若使用的是集合类的迭代器方式,可使用迭代器自身的remove方法移除元素方法解决问题;

      (2)若使用的for方法且是以数组下标获取元素,可使用动态修改索引值方法解决问题;

      (3)通用方法,可建立一个临时存储集合,在循环过程中将要修改的元素加入其中。迭代完成一次修改;

      (4)如果可以指定数据初始存储类型,可以使用线程安全CopyOnWriteArrayList进行删除操作的方法解决问题;

    List<String> strList = new ArrayList<String>();  
    strList.add("string1");  
    strList.add("string2");  
    strList.add("string3");  
    strList.add("string4");  
    strList.add("string5");  
    strList.add("string6");
    // 方法(1)
    Iterator<String> it = strList.iterator();  
    while(it.hasNext()) {  
        String s = it.next();  
        if("string2".equals(s)) {  
            it.remove();  
        }  
    }  
    

      

    List<String> strList = new ArrayList<String>();  
    strList.add("string1");  
    strList.add("string2");  
    strList.add("string3");  
    strList.add("string4");  
    strList.add("string5");  
    strList.add("string6");
    // 方法(2)
    for(int i=0; i<strList.size(); i++) {  
        String s = strList.get(i);  
        if("string2".equals(s)) {  
            strList.remove(s);  
            strList.remove(i);  
            i--;// 元素位置发生变化,修改i  
        }  
    }  
    

      

    List<String> strList = new ArrayList<String>();  
    strList.add("string1");  
    strList.add("string2");  
    strList.add("string3");  
    strList.add("string4");  
    strList.add("string5");  
    strList.add("string6");
    // 方法(3)
    List<String> templist = new ArrayList<String>();  
    for (String s : strList) {  
        if(s.equals("string2")) {  
            templist.add(s);  
        }  
    }  
    // 查看removeAll源码,其使用Iterator进行遍历  
    strList.removeAll(templist);  
    

      

    //方法(4)
    List<String> strList = new CopyOnWriteArrayList<String>();  
    strList.add("string1");  
    strList.add("string2");  
    strList.add("string3");  
    strList.add("string4");  
    strList.add("string5");  
    strList.add("string6");  
    Iterator<String> it = strList.iterator();  
    while (it.hasNext()) {  
        String s = it.next();  
         if (s.equals("string2")) {  
             strList.remove(s);  
        }  
    }  
    

      

     
  • 相关阅读:
    IE调试页面总结
    解决XAMPP不能启动Apche服务问题
    WCF与Ajax开发实践系列课程
    Team Foundation 中的错误和事件消息
    设置SVN提交日志必填
    MyBatis.Net 学习手记
    PandorBox 中安装aria2失败的解决办法
    Linux 启动出现 busybox vx.x.xx built-in shell 的问题
    Sql Server 中查询存储过程的修改时间
    ubuntu挂载和挂载NTFS分区命令
  • 原文地址:https://www.cnblogs.com/chendeming/p/8179709.html
Copyright © 2011-2022 走看看