当前位置: 首页 > article >正文

【教3妹学编程-java实战4】Map遍历删除元素的几种方法

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

2哥 :3妹,今天是周末,又不用上班,干嘛看着不开心的样子啊?
3妹:你没有看昨天的新闻吗, 昨天国家痛失了两位重要人物。

2哥:哎,看到了,生老病死,也是没有办法。唯愿逝者安息,生者坚强!
我们能做的,就是更加坚强,好好学习,建设祖国!
3妹:好吧。
伤心

2哥:还记得我们之前学习的:list遍历时删除元素的方法 吗, 那如果map又该如何删除元素呢?
3妹:emmm……, list是用iterator或者java 8的removeIf删除, 我想map也是如此吧。
2哥:差不多, 不过map的迭代删除,和我们常见的list还不太一样,不能直接获取Iteraotr对象,提供的删除方法 也是单个的,根据key进行删除,如果我们有个需求,将map中满足某些条件的元素删除掉,要怎么做呢?让我们来学习一下吧。
学习

方法一:笨方法,遍历,找出key再删除

遍历map, 找出需要删除的key放在集合中, 然后再删除, 代码如下:

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
        map.put("d", 4);
        List<String> toRemoveKeys = new ArrayList<>();
        for (Map.Entry<String, Integer> e : map.entrySet()) {
            if (e.getValue() % 2 == 0) {
                toRemoveKeys.add(e.getKey());
            }
        }
        toRemoveKeys.forEach(map::remove);
    }

方法二:entrySet

虽然Map没有迭代,但是它的entrySet有啊,所以我们可以通过它来实现遍历删除。这个可能是我们经常使用的方法:

    public static void main(String[] args) {
        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);
    }

方法三:jdk8 removeIf方法

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

    public static void main(String[] args) {
        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);
    }

总结 :

  • 和list删除元素一样,不要在for或foreach迭代过程中删除数据,如有需要,可以使用迭代器entrySet.Iterator或者jdk8 的removeIf流式写法。
推荐阅读:

list遍历时删除元素的方法
数组拷贝的几种实现方式
字符串的驼峰与下划线互转


http://www.kler.cn/news/108465.html

相关文章:

  • etcd的mvcc源码剖析
  • 最新发布!阿里云卓越架构框架重磅升级
  • 漏洞复现--企望制造ERP系统 RCE
  • Webpack 基础以及常用插件使用方法
  • 新增选股结果树形列表,快速加载大牛股来分析——股票量化分析工具QTYX-V2.7.2...
  • mysql 增删改查基础命令
  • SpringMVC Day02 : 请求方式
  • 数组与链表算法-数组与多项式
  • 速卖通商品详情API接口获取aliexpress速卖通商品详情信息、销量、价格、商品规格信息参数调用示例说明
  • vue2 quill 视频上传 ,基于ruoyi vue,oss
  • 『阿里云盘 AList Kodi』家庭影院搭建指南
  • 本机spark 通idea连接Oracle的坑
  • Redis原理-IO模型和持久化
  • LeetCode 2656. K 个元素的最大和【数学】简单
  • 基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】
  • 数据库MySQL(五):多表查询
  • 【转信创】银河麒麟:系统安全机制
  • 【LeetCode每日一题合集】2023.10.23-2023.10.29(简单的一周)
  • SparkSQL综合案例-省份维度的销售情况统计分析
  • 【深度学习】Python使用指定gpu运行代码
  • 基于 matplotlib 实现的基本排序算法的动态可视化项目源码,通过 pyaudio 增加音效,冒泡、选择、插入、快速等排序
  • RabbitMQ (4)
  • 机器学习之IV编码,分箱WOE编码
  • 云起无垠典型案例入选《2023软件供应链安全洞察》报告
  • MySQL-DQL【数据查询语言】(图码结合)
  • 首次cmake 多目录构建失败
  • 微信小程序 slot 不显示
  • 私有云:【3】NFS存储服务器的安装
  • Linux内核驱动开发的需要掌握的知识点
  • 虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)