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?
}