出现 java.util.ConcurrentModificationException 时的解决办法

来源:互联网 发布:java实现约瑟夫环 编辑:程序博客网 时间:2024/05/29 02:53

原文:http://www.cnblogs.com/error404/archive/2011/11/25/2263671.html



for (int i=0; i<list.size(); i++) {  // 只有在这种方式遍历集合时,同时对集合增加、删除才不会影响。

  // list.remove(list.get(i));  

}

在对一个map进行迭代遍历并删除一些符合条件的键值对的时候,容易出现 

      java.util.ConcurrentModificationException 这个异常。Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)at java.util.HashMap$KeyIterator.next(HashMap.java:823) 

解决办法如下: 
import java.util.*; public class TestMap {   public TestMap() {   }    public static void main(String[] args) {     java.util.Map m = new java.util.HashMap();     m.put("aaa", "lizongbo ");     m.put("bbb", " lizongbo");     m.put("ccc", "lizongbo   ");     m.put("ddd", "   lizongbo");     m.put("eee", "lizongbo");     m.put("fff", "lizongbo");     m.put("ggg", "lizongbo");     m.put("adads", "lizongbo");     m.put("dffd", "lizongbo");     m.put("dcxv", "lizongbo");     m.put("lizongbo", "lizongbo");     m.put("ert", "lizongbo");     m.put("544", "lizongbo ");     Iterator iterator = m.keySet().iterator();      while (iterator.hasNext()) {       String sessionId = (String) iterator.next();       if ("ggg".equals(sessionId) || "lizongbo".equals(sessionId) ||           "544".equals(sessionId)) {         iterator.remove();        //这行代码是关键。         m.remove(sessionId);       }     }     System.out.println(m.get("ggg"));     System.out.println(m.get("lizongbo"));     System.out.println(m.get("544"));   }