Java基础教程之HashMap迭代删除使用方法

作者:小灰灰Blog 时间:2023-10-04 02:15:32 

前言

map的迭代删除,和我们常见的list,set不太一样,不能直接获取Iteraotr对象,提供的删除方法也是单个的,根据key进行删除,如果我们有个需求,将map中满足某些条件的元素删除掉,要怎么做呢?

I. Map 迭代删除

迭代删除,在不考虑并发安全的前提下,我们看下可以怎么支持

1. 非常不优雅版本

我们知道map并不是继承自Collection接口的,HashMap 也没有提供迭代支持,既然没法直接迭代,那我就老老实的low b版好了


Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);

List<String> removeKey = new ArrayList<>();
for (Map.Entry<String, Integer> e: map.entrySet()) {
 if (e.getValue() % 2== 0) {
   removeKey.add(e.getKey());
 }
}
removeKey.forEach(map::remove);

上面的实现怎么样?并没有什么毛病

(为啥不直接在遍历中删除?)

2. 正确姿势版

虽然Map没有迭代,但是它的entrySet有啊,所以我们可以通过它来实现遍历删除


Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);

Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
Map.Entry<String, Integer> entry;
while (iterator.hasNext()) {
 entry = iterator.next();
 if (entry.getValue() % 2 == 0) {
   iterator.remove();
 }
}
System.out.println(map);

上面这个可能是我们经常使用的操作姿势了,利用迭代器来操作元素

3. 简洁版

到jdk8之后,针对容器提供了很多简洁的操作方式,迭代删除这方面可以说更加简单了


Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);

4. 其他

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

来源:https://segmentfault.com/a/1190000019333311

标签:hashmap,迭代,java
0
投稿

猜你喜欢

  • 基于标准http实现Android多文件上传

    2023-05-28 05:55:28
  • SpringBoot中的main方法注入service

    2021-10-31 15:33:33
  • android 类似微信的摇一摇功能实现思路及代码

    2022-09-16 03:45:36
  • java将一个目录下的所有文件复制n次

    2023-03-04 00:13:12
  • java中JVM中如何存取数据和相关信息详解

    2023-08-10 03:49:46
  • 为何Linq的Distinct实在是不给力

    2023-05-11 17:03:18
  • c#简单工厂、工厂方法与抽象工厂的区别分析

    2021-11-30 04:39:47
  • 使用linq to xml修改app.config示例(linq读取xml)

    2022-11-22 22:01:28
  • textView 添加超链接(两种实现方式)

    2021-08-12 12:58:27
  • java实现Object转String的4种方法小结

    2023-07-18 08:54:53
  • Android Insets相关知识总结

    2023-04-24 09:08:23
  • Java NIO深入分析

    2022-12-29 03:50:27
  • 浅谈c++11线程的互斥量

    2023-02-14 18:00:44
  • Android7.0行为变更之适配File Provider的方法

    2021-09-24 08:02:38
  • 一场由Java中Integer引发的踩坑实战

    2021-09-06 11:14:40
  • ViewFlipper实现文字轮播效果

    2022-04-14 11:10:25
  • Android自定义View实现多边形统计图示例代码

    2021-09-28 13:17:44
  • C# IQueryable及IEnumerable区别解析

    2021-11-27 13:46:36
  • Android使用WebView播放flash的方法

    2021-08-10 04:46:51
  • Android开发之TimePicker控件用法实例详解

    2022-02-10 10:18:50
  • asp之家 软件编程 m.aspxhome.com