前言:

首先我们要知道HashMap 本身就是不可排序的,但这里我们要使HashMap 排序,那我们就得想在 API 中有没有这样的 Map 结构是有序的,那就需要用上LinkedHashMap,它是 Map 结构,也是链表结构有序的,更重要的是它是 HashMap 的子类。

但凡是对集合的操作,我们应该保持一个原则就是能用 JDK 中的 API 就有 JDK 中的 API,比如排序算法我们不应该去用冒泡或者选择,而是首先想到用 Collections 集合工具类。

场景:

已知一个 HashMap集合, User有 name(String)和 age(Integer)属性。请写一个方法实现对 HashMap 的排序功能,该方法接收 HashMap为形参,返回类型为 HashMap, 要求对 HashMap 中的 User的 age 升序排序。排序时 key=value 键值对不得拆散。

代码实现:

这里使用了lombok插件,减免了get、set的书写

@Data
public class User {private String name;private Integer age;public User(String name, Integer age) {this.name = name;this.age = age;}
}
public class TestMain1 {public static void main(String[] args) {HashMap<Integer, User> userHashMap = new HashMap<>();userHashMap.put(1, new User("小明", 15));userHashMap.put(2, new User("小黑", 19));userHashMap.put(3, new User("小白", 16));System.out.println("------------排序前-----------");System.out.println(userHashMap);HashMap<Integer, User> sortHashMap = sortHashMap(userHashMap);System.out.println("------------排序后-----------");System.out.println(sortHashMap);}public static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> map) {// 首先拿到 map 的键值对集合Set<Map.Entry<Integer, User>> entrySet = map.entrySet();// 将 set 集合转为 List 集合,为什么,为了使用工具类的排序方法List<Map.Entry<Integer, User>> list = new ArrayList<Map.Entry<Integer, User>>(entrySet);// 使用 Collections 集合工具类对 list 进行排序,排序规则使用匿名内部类来实现Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {@Overridepublic int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {//按照要求根据 User 的 age 的升序进行排,如果是倒序就是o2-o1return o1.getValue().getAge() - o2.getValue().getAge();}});//创建一个新的有序的 HashMap 子类的集合LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<Integer, User>();//将 List 中的数据存储在 LinkedHashMap 中for (Map.Entry<Integer, User> entry : list) {linkedHashMap.put(entry.getKey(), entry.getValue());}//返回结果return linkedHashMap;}
}

输出:

其中我们会发现这一步其实就是对list的排序

java中hashMap排序相关推荐

  1. java的hashmap排序_Java面试题:如何对HashMap按键值排序

    Java中HashMap是一种用于存储"键"和"值"信息对的数据结构.不同于Array.ArrayList和LinkedLists,它不会维持插入元素的顺序. ...

  2. java中自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  3. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  4. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  5. java中的排序方法,Java中的排序比较方式:自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  6. Java中HashMap的常用操作

    Java中HashMap的常用操作 HashMap<Integer, Integer> hashMap = new HashMap<>();hashMap.put(5, 2); ...

  7. Java中HashMap底层实现原理

    Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析 这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap ...

  8. java基础--java中HashMap原理

    java中HashMap原理 内推军P21 P22 1.为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表 ...

  9. java中hashmap遍历

    java中hashmap遍历有两种方法,第一种就是将所有的key放到set中,然后通过遍历set通过key来获取value,可以选择使用迭代器遍历也可以使用增强for来遍历,第二种可以使用entrys ...

  10. java 中的排序_浅谈java中常见的排序

    浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...

最新文章

  1. 自然语言处理深度学习篇-BiLSTM文本挖掘实践 命名实体识别
  2. php 对数据转换成tree,PHP 把返回的數據集轉換成Tree樹
  3. logstash日志用于匹配多行日志
  4. Connect 2016过后,你的信仰势必需要更大的容器
  5. 快速轻巧的CQRS和事件源解决方案
  6. 227 用栈模拟汉诺塔问题
  7. Win32汇编——文件操作
  8. vector public member function
  9. 踩过的坑 vertical-alignline-height
  10. 全国计算机演示文稿,全国计算机等级考试二级office演示文稿题目[文].pdf
  11. Redis开发与运维学习笔记
  12. 条件欧几里得聚类实验数据集Statues_4.pcd下载
  13. 2022年01月最新 | 全国网络安全等级测评与检测评估机构目录,新增6家,共计224家...
  14. Nodejs中,使用nock做http请求的mock
  15. 给米钱包、买买分收取用户15%-20%“砍头息”,泸州银行为资金方
  16. Android自定义视频播放器(三)
  17. Lock和Rlock
  18. 软件测试需要具备的基本职业素养
  19. USB协议详解第3讲(USB描述符-设备描述符)
  20. ZOJ 3716 - Ribbon Gymnastics

热门文章

  1. 最通俗易懂的JavaScript入门教程
  2. OFD文件是什么?如何将ofd转成PDF格式?
  3. qqkey获取原理_征途手机版电脑版安装使用教程【安卓+ios电脑版图文攻略】
  4. java如何进行性能调优,Java性能调优常用方法
  5. SSM中拦截器和过滤器
  6. android开源系统brvah,Brvah——一个强大的Adapter框架
  7. 数据仓库的特点、数据仓库分层、数据仓库模型
  8. 两种内点法,障碍函数法(Barrier Method)和原始对偶法(Primal-Dual Method)
  9. FreeSwitch SIP基本原理和流程
  10. Spring之事务管理与事务的传播特性