欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

如何避免在使用 Iterator 时发生 ConcurrentModificationException 异常,,Java的集合类中,当我

来源: javaer 分享于  点击 41116 次 点评:12

如何避免在使用 Iterator 时发生 ConcurrentModificationException 异常,,Java的集合类中,当我


Java的集合类中,当我们使用迭代器来进行元素遍历的时候,如果集合元素发生变化,就会抛出异常ConcurrentModificationException.本代码告诉你如何避免该异常http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html

IteratorExample.java

import java.util.*;public class IteratorExample {    public static void main(String args[]){        List<String> myList = new ArrayList<String>();        myList.add("1");        myList.add("2");        myList.add("3");        myList.add("4");        myList.add("5");        Iterator<String> it = myList.iterator();        while(it.hasNext()){            String value = it.next();            System.out.println("List Value:"+value);            if(value.equals("3")) myList.remove(value);        }        Map<String,String> myMap = new HashMap<String,String>();        myMap.put("1", "1");        myMap.put("2", "2");        myMap.put("3", "3");        Iterator<String> it1 = myMap.keySet().iterator();        while(it1.hasNext()){            String key = it1.next();            System.out.println("Map Value:"+myMap.get(key));            if(key.equals("2")){                myMap.put("1","4");                //myMap.put("4", "4");            }        }    }}

执行输出结果

List Value:1List Value:2List Value:3Exception in thread "main" java.util.ConcurrentModificationException    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)    at java.util.AbstractList$Itr.next(AbstractList.java:343)    at com.journaldev.java.IteratorExample.main(IteratorExample.java:27)

ThreadSafeIteratorExample.java

package com.journaldev.java;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.CopyOnWriteArrayList;/** * 在单线程环境下避免异常发生 * @author Winter Lau (http://www.oschina.net) */public class ThreadSafeIteratorExample {    public static void main(String[] args) {        List<String> myList = new CopyOnWriteArrayList<String>();        myList.add("1");        myList.add("2");        myList.add("3");        myList.add("4");        myList.add("5");        Iterator<String> it = myList.iterator();        while(it.hasNext()){            String value = it.next();            System.out.println("List Value:"+value);            if(value.equals("3")){                myList.remove("4");                myList.add("6");                myList.add("7");            }        }        System.out.println("List Size:"+myList.size());        Map<String,String> myMap =              new ConcurrentHashMap<String,String>();        myMap.put("1", "1");        myMap.put("2", "2");        myMap.put("3", "3");        Iterator<String> it1 = myMap.keySet().iterator();        while(it1.hasNext()){            String key = it1.next();            System.out.println("Map Value:"+myMap.get(key));            if(key.equals("1")){                myMap.remove("3");                myMap.put("4", "4");                myMap.put("5", "5");            }        }        System.out.println("Map Size:"+myMap.size());    }}
相关栏目:

相关文章

    用户点评