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());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值