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

      

     
  • 相关阅读:
    Python操作Excel
    JMeter生成UUID方式
    JMeter之Beanshell用法
    JMeter后置处理器
    JMeter后置处理器
    Python之正则匹配 re库
    read(),readline() 和 readlines() 比较
    Python的位置参数、默认参数、关键字参数、可变参数之间的区别
    调查管理系统 -(6)自定义Struts2的拦截器&自定义UserAware接口&Action中模型赋值问题&Hibernate懒加载问题
    调查管理系统 -(5)Struts2配置&用户注册/登录/校验
  • 原文地址:https://www.cnblogs.com/chendeming/p/8179709.html
Copyright © 2011-2022 走看看