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