以有效的方式从地图中删除多个键?

我有一个包含大量键值对的Map<String,String> 。 现在我想从该Map删除选定的键。 以下代码显示了我做了什么来实现这一点。

 Set keySet = new HashSet(); //I added keys to keySet which I want to remove. 

然后 :

 Iterator entriesIterator = keySet.iterator(); while (entriesIterator.hasNext()) { map.remove( entriesIterator.next().toString()); } 

这是工作。 我只是想知道,有什么更好的方法来达到我的要求?

假设你的集合包含你想要删除的string,你可以使用keySet方法和map.keySet().removeAll(keySet);

keySet返回包含在此映射中的键的Set视图。 该集合由地图支持,所以对地图的更改反映在集合中,反之亦然。

被举的例子:

 Map<String, String> map = new HashMap<>(); map.put("a", ""); map.put("b", ""); map.put("c", ""); Set<String> set = new HashSet<> (); set.add("a"); set.add("b"); map.keySet().removeAll(set); System.out.println(map); //only contains "c" 

只是为了完整:

正如猜测的java.util.AbstractSet#removeAll真正遍历所有的条目,但有一个小诀窍:它使用较小集合的迭代器:

 if (size() <= collection.size()) { Iterator<?> it = iterator(); while (it.hasNext()) { if (collection.contains(it.next())) { it.remove(); } } } else { Iterator<?> it = collection.iterator(); while (it.hasNext()) { remove(it.next()); } }