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

原文: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.ConcurrentModificationException
at 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"));
   }
时间: 2024-12-20 22:04:49

出现 java.util.ConcurrentModificationException 时的解决办法的相关文章

解决java.util.ConcurrentModificationException错误办法

这个异常一般在我们遍历删除集合元素时出现.写了下面这个代码来展示这个异常. [java] import java.util.ArrayList; import java.util.List; public class ExeptionTest { public static void main(String[] args) { List list = new ArrayList(); list.add("a"); list.add("b"); list.add(&q

java.util.ConcurrentModificationException 解决方法_OpenStack

 java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除. 则使用会报以下异常: Java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$Key

java.util.ConcurrentModificationException异常 解决方法

原文:http://blog.sina.com.cn/s/blog_48dc562301000d2b.html 今天写一个程序的时候遇到了java.util.ConcurrentModificationException异常,半天不知道是什么问题,这里举个简单的例子重现一下异常是如何出现的: import java.util.ArrayList; import java.util.Iterator; class User { private String userName, password;

多线程 java.util.ConcurrentModificationException 问题

问题描述 目标:定义一个Producer类创建Student并添加到studnts集合中,再定义一个Consumer类从studnts集合中取出数据并打印控制台.Producer,Consumer类都实现了Runnable接口.在MainTest类的main方法中创建线程并启动,如下所示:        Producer p = new Producer();        Thread tp1 = new Thread(p);        tp1.start();              

Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法_java

下面给大家介绍几种比较常见的解决办法,具体内容如下: 1.有时候eclipse不自动编译,把project clean一下,让R.java重新生成 2.选择菜单 Project >> Clean ,前提是勾选上 Bulid Automatically(自动构建部署) , 点Clean后会重新构建项目,因为一般情况下,R.java文件在这个时候会重新更新生成一边,如果工程有错,就不会自动生成. 3.选择工程,右键 Android Tools >> Fix Project Proper

IIS6安装时提示“将加密数据写入Web服务器配置数据库时出错”解决办法

IIS6安装时提示将加密数据写入Web服务器配置数据库时出错的解决办法 出错提示: 上图是切的遇到同样问题的一兄弟的,我的提示是"将加密数据写入Web服务器配置数据库时出错 0×80070006=句柄无效" 解决办法: 1.检查计算机用户管理内的ASPNET用户是否被禁用,如果被禁用请在用户属性里把禁用前的对号去掉; 2.删除C:Documents and SettingsAll UsersApplication DataMicrosoftCryptoRSA下的MachineKeys文

动态地址rewrite伪静态,然后301跳转到伪静态时死循环解决办法

问题背景:矿秘书网的历史遗留问题,刚开始由于各种问题,一些动态页面都是用了?id=参数的形式,对seo/seo.html" target="_blank">搜索引擎不友好,经常多方面考虑,还是改成伪静态.这里劝各位站长在做新站时,尽量使用伪静态,不仅对搜索引擎,对用户体验也友好. 问题描述:需要将 /news/show_news.php?id=1 形式的地址伪静态成 /news/1 形式,而且 /news/show_news.php?id=1 在浏览器打开要 301 跳

java.util.ConcurrentModificationException 已经百度过,折腾很久还是没想出来!!

问题描述 代码很简单 ,其实就是想测试一下iterator 的用法,而且我在用iterator遍历的时候也没有修改原来集合中的内容.import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class TestList {/** * @param args */public static void main(String[] args) {// TODO Auto-generated met

Windows下文件或文件夹不能删除时的解决办法

  windows在删除文件或文件夹时,提示文件或文件夹被占用而无法删除 解决办法:win7: winxp:需要借助第三方工具Unlocker.360.Process Explorer(这个是微软支持的)通过工具找到占用文件或文件夹的进程后,结束此进程即可 以Process Explorer为例: https://download.sysinternals.com/files/ProcessExplorer.ziphttps://technet.microsoft.com/en-us/sysin