HashMap的Iterator防止并发修改
HashMap's Iterator to prevent concurrent modification
以下代码在单线程执行时在第 4 行抛出 ConcurrentModificationException
:
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
for (String key : map.keySet()) { // Here
map.remove(key);
}
我在 HashMap
Javadoc 上找不到任何 Map.iterator()
或 Map.mapIterator()
方法。
我该怎么办?
如您所料,您需要一个 iterator
用于在迭代期间删除项目。使用 Map
的方法是迭代 entrySet()
(或者,如果您只需要评估密钥,则 keySet()
):
Iterator<Map.Entry<String, String>> entryIter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry = iter.next();
iter.remove(); // Probably guard this by some condition?
}
以下代码在单线程执行时在第 4 行抛出 ConcurrentModificationException
:
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
for (String key : map.keySet()) { // Here
map.remove(key);
}
我在 HashMap
Javadoc 上找不到任何 Map.iterator()
或 Map.mapIterator()
方法。
我该怎么办?
如您所料,您需要一个 iterator
用于在迭代期间删除项目。使用 Map
的方法是迭代 entrySet()
(或者,如果您只需要评估密钥,则 keySet()
):
Iterator<Map.Entry<String, String>> entryIter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry = iter.next();
iter.remove(); // Probably guard this by some condition?
}