问题
我有一个带有大量键值对的aMap。现在我想删除thatMap中的所选键。以下代码显示了我为实现这一点所做的工作。
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());
}
这很有效。我只想知道,实现我的要求会有什么更好的方法?
#1 热门回答(177 赞)
假设你的集合包含要删除的字符串,则可以使用keySetmethodandmap.keySet().removeAll(keySet);。
keySet返回此映射中包含的键的Set视图。该集由 Map 支持,因此对 Map 的更改将反映在集中,反之亦然。
举例:
Map map = new HashMap<>();
map.put("a", "");
map.put("b", "");
map.put("c", "");
Set set = new HashSet<> ();
set.add("a");
set.add("b");
map.keySet().removeAll(set);
System.out.println(map); //only contains "c"
#2 热门回答(1 赞)
只是为了完整起见:
正如guessedjava.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());
}
}