JAVA中map删除键值对_以有效的方式从Map中删除多个键?

问题

我有一个带有大量键值对的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());

}

}


版权声明:本文为weixin_29435467原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。