• 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);  
        }  
    }  
    

      

     
  • 相关阅读:
    前端微服务
    日志系统的设计
    js解决数据精度问题
    前端取不到header 里面的内容问题
    sql server 数据库查询 json 数据乱码
    IDEA 根据 DCEVM + Hotswap Agent 实现项目热部署
    Redis 常用命令
    Spring Data JPA native query 分页
    十八年开发经验分享(06)递归程序构造
    十八年开发经验分享(07)递归程序设计
  • 原文地址:https://www.cnblogs.com/chendeming/p/8179709.html
Copyright © 2020-2023  润新知