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,然后再进行循环操作。

 

相关文章
go语言中遍历映射(map)
go语言中遍历映射(map)
328 8
Collection和Map的遍历方式
Collection和Map的遍历方式
132 0
|
8月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
403 121
|
8月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
318 43
|
9月前
|
存储 安全 Go
Map的遍历与判断键是否存在-《Go语言实战指南》
本文介绍了 Go 语言中对 `map` 的常见操作,包括遍历所有项和判断键是否存在。通过 `for range` 可以遍历 `map` 的键值对、仅键或仅值(需忽略键)。注意,`map` 遍历顺序是随机的。判断键是否存在时,使用双赋值语法 `value, ok := map[key]`,其中 `ok` 表示键是否存在。直接访问不存在的键会返回类型的零值,可能导致逻辑错误。掌握这些机制可更安全高效地处理键值对数据。
|
11月前
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
go语言for遍历映射(map)
go语言for遍历映射(map)
461 12
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
376 2
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
460 1

热门文章

最新文章