Map遍历时报ConcurrentModificationException解决方法

简介: Map遍历时报ConcurrentModificationException解决方法

昨天遇到一个问题,就是在遍历Map的时候,报了一个异常:

java.util.ConcurrentModificationException
  at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
  at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
  at java.util.HashMap$EntryIterator.next(HashMap.java:1469)

发现原因如下:

Iterator做遍历的时候,HashMap被修改时会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。

给出的解决方案如下:

1) 通过Iterator修改Hashtable

while(it.hasNext()) {

       Object ele = it.next();

       it.remove();

}

2) 根据实际程序,您自己手动给Iterator遍历的那段程序加锁,给修改HashMap的那段程序加锁。

3) 使用“ConcurrentHashMap”替换HashMap

ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。

import java.util.concurrent.*;

我采用的是第三种,代码如下:

Map<String, String> map = new ConcurrentHashMap<String, String>();      
map.putAll(param);
for (Map.Entry<String, String> entry : map.entrySet()) {
  String key = entry.getKey();
  map.remove(key);
}

其中param就是调用类传入的map,把它转成 ConcurrentHashMap,然后再进行循环操作。

 

相关文章
Map遍历的几种方法
Map遍历的几种方法
|
6月前
Collection和Map的遍历方式
Collection和Map的遍历方式
33 0
|
6月前
|
测试技术
你知道几种遍历map的方式?
你知道几种遍历map的方式?
|
26天前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
17 1
|
4月前
|
JavaScript API
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
73 1
|
5月前
|
缓存 Java 测试技术
探讨Java中遍历Map集合的最快方式
探讨Java中遍历Map集合的最快方式
66 1
|
5月前
|
存储 缓存 Java
Java遍历Map集合的方法
在Java中,遍历Map集合主要有四种方式:1) 使用`keySet()`遍历keys并用`get()`获取values;2) 使用`entrySet()`直接遍历键值对,效率较高;3) 通过`Iterator`遍历,适合在遍历中删除元素;4) Java 8及以上版本可用`forEach`和Lambda表达式,简洁易读。`entrySet()`通常性能最佳,而遍历方式的选择应考虑代码可读性和数据量。
60 0
Map集合的有序遍历,解决方法多看一下别人的资料
Map集合的有序遍历,解决方法多看一下别人的资料
|
6月前
|
Java
|
5月前
|
Java API 存储
java中Map遍历详解
java中Map遍历详解