码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【map排序 遍历】


    按key排序:使用Comparator进行排序

    按Key排序主要用于TreeMap,可以实现按照Key值的大小,在对象插入时直接插入到合适的位置,保持Map的顺序性。

    来看TreeMap的构造函数:TreeMap(Comparator comparator):构造一个新的、空的树映射,该映射根据给定比较器进行排序。

    这里的比较器是key的比较器。所以定义比较器时用于比较的两个参数是Key的数据类型的对象。
    比较声明器:

    public class MapKeyComparator implements Comparator<String> {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用声明器进行排序:

    Map<String, Map<String, List<Insurce>>> sortMap = new TreeMap<>(new MapKeyComparator());
    sortMap.putAll(collect);
    System.out.println(sortMap);
    
    • 1
    • 2
    • 3

    排序参考链接:https://blog.csdn.net/hui008/article/details/81702883?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-81702883-blog-124148763.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-81702883-blog-124148763.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=1

    遍历:map的4种遍历方式

    1、在for循环中使用entrySet的遍历,也可以同时拿到key和value,用的最多

    Map <String,String>map = new HashMap<String,String>();
    map.put("熊大", "棕色");
    map.put("熊二", "黄色");
    for(Map.Entry<String, String> entry : map.entrySet()){
        String mapKey = entry.getKey();
        String mapValue = entry.getValue();
        System.out.println(mapKey+":"+mapValue);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、在for循环中使用map.keySet()遍历key通过map.get(key)获取单个值,或使用map.values()遍历获取values
    这种方式一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;

    Map <String,String>map = new HashMap<String,String>();
    map.put("熊大", "棕色");
    map.put("熊二", "黄色");
    //key
    for(String key : map.keySet()){
        System.out.println(key);
    }
    //value
    for(String value : map.values()){
        System.out.println(value);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    System.out.println("通过map.keyset进行遍历key和value");
    
    for (String key:map.keySet()){
    
       System.out.println("key= "+key+" and value= "+map.get(key));
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、通过Iterator遍历
    在使用Iterator遍历时:使用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素

    Iterator<Entry<String, String>> entries = map.entrySet().iterator();
    ​
    //用迭代器的时候注意:next()方法在同一循环中不能出现俩次!
    //否则会抛出NoSuchElementException异常。
    while(entries.hasNext()){
        Entry<String, String> entry = entries.next();
        String key = entry.getKey();
        String value = entry.getValue();
        System.out.println(key+":"+value);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4、通过键找值遍历(就是第二种遍历key的方式+get值的方式)
    这种方式的效率比较低,因为本身从键取值是耗时的操作,不建议使用;

    for(String key : map.keySet()){
        String value = map.get(key);
        System.out.println(key+":"+value);
    }
    
    • 1
    • 2
    • 3
    • 4

    一些结论:
    如果只是获取key,或者value,推荐使用keySet或者values方式
    如果同时需要key和value推荐使用entrySet
    如果需要在遍历过程中删除元素推荐使用Iterator
    如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中
    map遍历参考链接:https://blog.csdn.net/qq_44750696/article/details/112254719

  • 相关阅读:
    ElementUI编辑表格单元格与查看模式切换的应用
    赞!优雅的Python多环境管理神器!易上手易操作!
    Linux内核之堆溢出的利用
    LeetCode //C - 210. Course Schedule II
    java毕业设计调酒互动交流平台Mybatis+系统+数据库+调试部署
    FlinkSql中的join操作详解
    python脚本(渗透测试)
    【安卓手机】如何解决wifi被拉黑,连不上WiFi
    Ceres Solver简介及使用
    如何理解IOC中的反射操作
  • 原文地址:https://blog.csdn.net/m0_46459413/article/details/127777851
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号