以有效的方式从地图中删除多个键?
我有一个包含大量键值对的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()); } }