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

  

 
posted @ 2018-01-07 19:43  chendeming  阅读(200)  评论(0编辑  收藏  举报