-
原因
在 Java 中,在遍历 HashMap 的同时删除元素会导致并发修改异常 (ConcurrentModificationException)。这是因为 HashMap 在内部使用了迭代器来遍历,而迭代器是不允许在遍历过程中修改集合的。 -
解决方案
方案一:
使用 Iterator 的 remove() 方法删除元素,而不是直接在 HashMap 上使用 remove() 方法,如:Iterator
> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); if (entry.getKey().equals(keyToRemove)) { iterator.remove(); } } 方案二:
使用一个临时的容器,将要删除的元素存储起来,遍历完后再删除,如:List
keysToRemove = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { if (entry.getKey().equals(keyToRemove)) { keysToRemove.add(entry.getKey()); } } for (Integer key : keysToRemove) { map.remove(key); } 方案三:
使用 Java 8 中的 Stream API,如:map.entrySet().removeIf(entry -> entry.getKey().equals(keyToRemove));