首页 > 其他分享 >Map遍历删除元素的几种方法

Map遍历删除元素的几种方法

时间:2023-11-14 22:32:52浏览次数:31  
标签:Map 遍历 删除 iterator map entrySet put

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

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

Map遍历删除元素的几种方法_迭代

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

Map遍历删除元素的几种方法_迭代_02

方法一:笨方法,遍历,找出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流式写法。

标签:Map,遍历,删除,iterator,map,entrySet,put
From: https://blog.51cto.com/u_6813689/8379640

相关文章

  • Java集合—HashMap
    HashMap简介HashMap是一个散列表,它存储的内容是键值对(key-value)映射。HashMap实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。HashMap是无序的,即不会记录插入的顺序。HashMap继承于AbstractMap,实现了Map、Clone......
  • 【笔记】可删除堆
    可删除堆考虑到没什么人会选择手写普通的堆,所以用优先队列实现就好。问题:我们知道,在使用堆或优先队列的时候,我们只能取出堆顶,也就是所维护的最大或最小值。那么如果我们要从所维护的一个元素里删除一个非最大或最小值呢?最暴力的做法是将元素一个一个从堆顶弹出,直到弹出我们要......
  • 任何用let或const声明的属性不能够从它被声明的作用域中删除。任何使用 var 声明的属
    请问以下JS代码的输出结果是什么?leta=1;letobj={x:1}deletea;deleteobj.x;delete2;console.log(a);console.log(obj.x);console.log(2);A1、1、2B1、undefined、2C1、undefined、undefinedDundefined、undefined、undefined正确答案:B需要明确的......
  • k8s 删除Terminating状态的namespace
    查看ns状态root@test-10-5-2-15:~#kubectlgetnsNAMESTATUSAGEcert-managerTerminating19h查看该命名空间下的资源kubectlapi-resources-oname--verbs=list--namespaced|xargs-n1kubectlget--show-kind--ignore-not-found-n......
  • Python基础之map()函数
    map()函数会根据提供的对指定的可迭代对象的每个元素进行运算,并将返回运算结果的迭代器。先去将几个例子,这样比较通俗易懂。eg1:输入数据型a=map(int,input().split())输入:1213结果为:分析:map(int,input().split())将输入的值(input.split()的东西也叫做可迭代对象)通过空格......
  • 视频直播点播平台EasyDSS无法删除分组,如何解决?
    EasyDSS视频推拉流平台可支持用户自行上传视频文件,也可将上传的点播文件作为虚拟直播进行播放。平台能支持多屏播放,可兼容Windows、Android、iOS、Mac等操作系统,还能支持CDN转推,具备较强的可拓展性与灵活性。有用户反馈,在EasyDSS上可以创建分组但删除分组时会提示无权操作,求助我们......
  • 根据数字值和探究 哈希以及unordered_map实现
    leecode里面的第一题,是两数值和,内容如下/**************************************************************给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。......
  • 二叉搜索树的插入 查找 删除
    //1、定义二叉搜索树类,封装查找、插入、删除操作删除最为麻烦,其中对于parent的保存用循环来记录while的条件需多加考虑#include<queue>#include<iostream>usingnamespacestd;classBinaryTreeNode{  private:  intvalue;  BinaryTreeNode*leftChild;......
  • Windows系统CMD命令行添加或删除路由
    Windows系统CMD命令行添加或删除路由 原文地址:https://www.cnblogs.com/dianchaozhang/p/16985395.html1,按Win键输入“CMD”,右键“以管理员身份运行” 2,在CMD窗口输入“ipconfig”并按Enter键  3,找到自己的网卡对应的“默认网关”,执行如下命令添加路由: routeadd{......
  • Java文件处理(一):创建文件、遍历文件夹、删除文件/文件夹
    本篇以代码为核心,在实践中自学吧年轻人~非常好迭代作业,爱来自BUAAFile对象要进行文件处理肯定需要File类啦。File的实例是一个实例(?),但是可以链接到本地的文件、文件夹,并对它们进行操作。从下面的一些示例中可以看到,同一份本地文件可以拥有多个File对象;同时,构造一个File对象......