如何对map进行排序_map排序_顽石九变的博客-程序员宅基地

技术标签: 排序  java基础  map  

Map介绍

常用的Map有HashMap,TreeMap,LinkedHashMap

HashMap:最常用的Map,根据key的HashCode值来存储数据,根据key可以直接获取它的Value,具有很快的访问速度。HashMap最多只允许一条记录的key值为null(多条会覆盖);允许多条记录的Value为null。非线程安全

TreeMap: 根据key排序,默认是按升序排序,也可以指定排序的比较器,遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非线程安全

LinkedHashMap: 插入顺序,遍历LinkedHashMap时,先得到的记录肯定是先插入的。继承HashMap,非线程安全

TreeMap排序

TreeMap只能根据key进行排序,TreeMap本身是个二叉树,元素的顺序是由key的值决定的

TreeMap内部默认有个Comparator,在new的时候可以覆盖默认的Comparator定义自己的排序规则,不过还是只能根据key进行排序

private static void sortTreeMap(){
    
    Map<String,String> map =new TreeMap<>((k1,k2)->{
    
        return k1.compareTo(k2);
    });
    map.put("a","2");
    map.put("c","5");
    map.put("d","6");
    map.put("b","1");
    map.forEach((k,v)->{
    
        System.out.println(k+":"+v);
    });
}

输出结果

a:2
b:1
c:5
d:6

HashMap排序

HashMap本身是没有顺序的,不能直接对其进行排序

要排序,只能先转成list,然后对list排序后,再转成LinkedHasHMap

这样做排序,完全由自己定义,既可以对key排序,也可以对value排序

private static void sortMapValue(){
    
    Map<String,String> map =new HashMap<>();
    map.put("a","2");
    map.put("c","5");
    map.put("d","6");
    map.put("b","1");
    List<Map.Entry<String,String>> lstEntry=new ArrayList<>(map.entrySet());
    Collections.sort(lstEntry,((o1, o2) -> {
    
        return o1.getValue().compareTo(o2.getValue());
    }));
    lstEntry.forEach(o->{
    
        System.out.println(o.getKey()+":"+o.getValue());
    });

    //如果一定要返回一个map,就new一个LinkedHashMap,将list中所有值依次put进去就可以
    /*LinkedHashMap<String,String> linkedHashMap=new LinkedHashMap<>();
    lstEntry.forEach(o->{
        linkedHashMap.put(o.getKey(),o.getValue());
    });*/

}

输出结果

b:1
a:2
c:5
d:6
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wlddhj/article/details/84343007

智能推荐

用户态和内核态的转换_Derren_Ang的博客-程序员宅基地

用户态切换到内核态的3种方式a. 系统调用        这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。b. 异常        当CPU在执行运行在

E.04.02 Zoom Fatigue: The Differing Impact on Introverts and Extroverts_zoomdogevdois_AlexChoyZX的博客-程序员宅基地

2021.04.02【课程导读】疫情之下,视频会议软件成了职场刚需。近日,有研究发现,性格外向和内向的人,在参加视频会议时都会感到疲惫,但他们觉得累的原因却很不一样。对于这两类人而言,视频会议的体验有何区别?你更接近其中的哪类人?【英文原文】Zoom Fatigue: The Differing Impact on Introverts and Extroverts视频会议疲劳症:内向或外向,受到的影响不一样By Aili McConnonOver a year into the Covid-

PKU ACM 1860 Bellman - Ford 算法_文西的博客-程序员宅基地

第一次接触 Bellman - Ford 算法。然后做了一个关于这个算法的题目,自己太水,搞了半天也没有AC,参考别人代码了,不过最后还算是敲出来了算法概要:算法采用松弛技术,对图中的所有边做松弛,松弛一共使用了 {V}-1次,因为图中最长的那条边的长度可能是 {V}-1条,所以经过 {V{-1次松弛,所有的边,都能松弛到最佳状态算法导论里,这个算法用来求解,最短路径的,这道题目稍

iOS开发之HTTP的请求头和响应头 以及常见的响应状态码_iOS爱到疯的博客-程序员宅基地

*************请求头**************请求头:包含了对客户端的环境描述、客户端请求信息等GET /minion.png HTTP/1.1   //包含了请求方法、请求资源路径、HTTP协议版本Host: 120.25.226.186:32812   //客户端想访问的服务器主机地址User-Agent: Mozilla/5.0  //客户端的类型,

使用gcc工具链进行Linux环境下的stm32开发_手语者hello的博客-程序员宅基地

使用gcc工具链进行Linux环境下的stm32开发 处于好奇和学习Linux的目的,准备开始在虚拟机VMware的Ubuntu9.10操作系统下搭建stm32的开发环境。整个过程包括:安装gcc工具链----&gt;建立工程目录---&gt;编写Makefile,连接文件---&gt;编译生成可执行文件---&gt;下载测试。我的工程资源:http://download.csdn....

vscode的格式化问题_vscode format document_郭郭郭牧鑫的博客-程序员宅基地

vscode的格式化问题一、先下载插件二、在setting.josn配置三、配置.editorconfig文件https://editorconfig.org一、先下载插件在插件商店中下载三个插件Beautify、Eslint、Vetur二、在setting.josn配置{ // tab 大小为2个空格 "editor.tabSize": 2, // 100 列后换行 "editor.wordWrapColumn": 100, // 保存时格式化 "

随便推点

根据时间段生成重叠时间_重叠时间段问题_weixin_26745985的博客-程序员宅基地

根据时间段生成重叠时间In data science world, people tend to think cleaning data is boring and desire more of machine learning and modeling challenges, but sometimes some problems might arise like a fun brain tea...

unity webgl内存_了解Unity WebGL中的内存_culiao6493的博客-程序员宅基地

自从我们发布Unity WebGL以来,我们已经在优化内存消耗方面投入了大量精力。 在 手册中 以及在 2015年Unite欧洲 和 2015年 Unite波士顿的 演讲中, 我们还一直在解释内存在WebGL中的工作方式 。 但是,由于这一直是我们与客户交谈中的热门话题,因此我们意识到我们应该对此进行更多讨论。 希望这篇文章能回答一些常见问题。 (Since we shipped Unity W...

MySQL 8.0中对EXISTS、NOT EXISTS的持续优化_老叶茶馆_的博客-程序员宅基地

继续给MySQL 8.0吹吹水MySQL在8.0.16版本之前,对 IN 和 EXISTS 处理是不一样的,EXISTS只能采用子查询方式,所以执行计划中能看到DEPENDENT SUB...

Pycharm使用技巧——自动调整代码格式汇总!自动化神器!_爬遍天下无敌手的博客-程序员宅基地

代码自动填充了空格问题在使用pycharm的代码编辑器时,常常懒得写空格,如下图,但这是不符合代码规范的,而且也会影响可读性。解决方法pycharm有自动调整代码格式的快捷键,默认为Alt+Ctrl+L,按下快捷键后,代码自动填充了空格。自动对齐代码问题在使用pycharm的代码编辑器时,有点时候copy的代码的没有按照代码格式对齐,如下图,但这是不符合代码规范的,而且也会影响可读性。解决方法pycharm有自动调整代码格式的快捷键,默认为Alt+Ctrl+L

ServletActionContext报错_servletactioncontext爆红_普通网友的博客-程序员宅基地

ServletActionContext报错,ServletActionContext.getRequest().setAttribute,项目中报红。原因:缺少servlet-api.jar解决办法:builder_path中添加,找到tomcat的安装包打开lib,在tomcat里面找一个这个servlet-api.jar包,添加到bulidpath里面。

js压缩混淆加密工具,解密工具_hds jsobfuscator_不老刘的博客-程序员宅基地

js压缩混淆加密有什么不同压缩 compress: 去掉空格,换行,注释等,格式紧凑,节约存储空间。混淆 obfuscate/garble:替换变量名或方法名,让js不容易看懂。也做到了压缩的效果。加密 encrypt:一般用eval方法加密,效果与混淆相似。也做到了压缩的效果。混淆加密:先混淆再加密。 有一款非常好用的工具js混淆加密工具绿

推荐文章

热门文章

相关标签