hashmap循环删除出现concurrentmodificationexception
时间: 2023-09-09 12:10:30 浏览: 162
在使用 HashMap 进行迭代时,如果在迭代的过程中对 HashMap 进行修改,就会抛出 ConcurrentModificationException 异常。这是因为在迭代过程中,HashMap 的内部数据结构被修改,导致迭代器的状态与 HashMap 的状态不一致。
解决方法有两个:
1.使用迭代器的 remove() 方法删除元素,而不是调用 HashMap 的 remove() 方法。
示例代码:
```
Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<K, V> entry = iterator.next();
if (/*需要删除该元素*/) {
iterator.remove(); // 使用迭代器的 remove() 方法删除元素
}
}
```
2.在循环时使用一个临时的集合来存储需要删除的元素,最后再统一删除。
示例代码:
```
List<K> toBeRemovedKeys = new ArrayList<>();
for (Map.Entry<K, V> entry : map.entrySet()) {
if (/*需要删除该元素*/) {
toBeRemovedKeys.add(entry.getKey()); // 将需要删除的键存入临时集合
}
}
for (K key : toBeRemovedKeys) {
map.remove(key); // 统一删除需要删除的元素
}
```
需要注意的是,这两种方法都不能保证并发修改 HashMap 的安全性。如果需要在多线程环境下对 HashMap 进行操作,应该使用线程安全的 ConcurrentHashMap。
阅读全文