HashMap排序题

题目

已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性。
请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer,User>为形参,返回类型为 HashMap<Integer,User>,
要求对 HashMap 中的 User 的 age 倒序进行排序。排序时 key=value 键值对不得拆散。 注意:要做出这道题必须对集合的体系结构非常的熟悉。
HashMap本身就是不可排序的,但是该题偏偏让HashMap排序,那我们就得想在API中有没有这样的 Map 结构是有序的,
我们不难发现其中LinkedHashMap就具有这样的结构,是链表结构有序的,更可喜的是他是 HashMap的子类,
我们返回LinkedHashMap<Integer,User>即可,还符合面向接口编程的思想。 但凡是对集合的操作,我们应该保持一个原则就是能用JDK中的API就用JDK中的 API,
比如排序算法我们不应该去用冒泡或者选择,而是首先想到用 Collections 集合工具类。

实现代码

```
package com; import java.util.*; public class Test {
public static void main(String[] args) {
HashMap<Integer, User> users = new HashMap<>();
users.put(1,new User("张三",25));
users.put(3,new User("李四",22));
users.put(2, new User("王五", 28));
System.out.println(users);//{1=User{name='张三', age=25}, 2=User{name='王五', age=28}, 3=User{name='李四', age=22}}
HashMap<Integer, User> sortHashMap = sortHashMap(users);
System.out.println(sortHashMap);//{2=User{name='王五', age=28}, 1=User{name='张三', age=25}, 3=User{name='李四', age=22}}
} 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<>(entrySet);
//使用collections集合工具类对list进行排序:重写排序规则new Comparator
Collections.sort(list, new Comparator<Map.Entry<Integer, User>>() {
@Override
public int compare(Map.Entry<Integer, User> o1, Map.Entry<Integer, User> o2) {
//根据user的age的倒叙排序
return o2.getValue().getAge()-o1.getValue().getAge();
}
});
//创建一个新的有序的HashMap子类的集合
LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<>();
//将list中数据存储在linkedHashMap中
for (Map.Entry<Integer,User> entry :list){
linkedHashMap.put(entry.getKey(),entry.getValue());
}
return linkedHashMap;
}
} ```

HashMap排序题的更多相关文章

  1. HashMap 排序

    本文章,摘抄自:2018黑马程序最新面试题汇总 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性.请写一个方法实现 ...

  2. HashMap排序的问题

    那么已知一个HashMap<Integer,User>集合, User有name(String)和 age(int)属性.请写一个方法实现对HashMap 的排序功能,该方法接收 Hash ...

  3. PAT甲级 排序题_C++题解

    排序题 PAT (Advanced Level) Practice 排序题 目录 <算法笔记> 6.9.6 sort()用法 <算法笔记> 4.1 排序题步骤 1012 The ...

  4. 【算法学习记录-排序题】【PAT A1012】The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  5. 给HashMap排序,使之成为有序Map

    如何给HashMap中的值排序?这个问题很多人都遇到过,很常见的一个方案是使用LinkedHashMap,因为LinkedHashMap可以记住元素放入的顺序,可以认为是真正的“有序”(想让HashM ...

  6. Map HashMap 排序 迭代循环 修改值

    HashMap dgzhMap = Dict.getDict("dgzh"); Iterator it_d = dgzhMap.entrySet().iterator(); whi ...

  7. Java零基础手把手系列:HashMap排序方法一网打尽

    HashMap的排序在一开始学习Java的时候,比较容易晕,今天总结了一些常见的方法,一网打尽.HashMap的排序入门,看这篇文章就够了. 1. 概述 本文排序HashMap的键(key)和值(va ...

  8. 【算法学习记录-排序题】【PAT A1016】Phone Bills

    A long-distance telephone company charges its customers by the following rules: Making a long-distan ...

  9. leetcode之链表排序题

    原文链接:点击打开链接 原题是这样的: Given a linked list and a value x, partition it such that all nodes less than x  ...

  10. Java中HashMap排序

    注: 转载于 http://www.cnblogs.com/xingyun/archive/2012/12/09/2809962.html package com.holdobject; import ...

随机推荐

  1. 和月薪3W的聊过后,才知道自己一直在打杂...

    前几天和一个朋友聊面试,他说上个月同时拿到了腾讯和阿里的offer,最后选择了阿里. 我了解了下他的面试过程,就一点,不管是阿里还是腾讯的面试,这个级别的程序员,都会考察项目管理能力,并且权重非常大. ...

  2. cmd/批处理常用命令

    启动新窗口执行命令 ::执行完毕以后,新开的窗口不会自动关闭 start cmd /k echo 123 ::执行完毕以后,新开的窗口会自动关闭 start cmd /C "echo 123 ...

  3. 《深度探索C++对象模型》第六章 执行期语意学

    new运算符和delete运算符 运算符new看似是一个简单的运算,比如: int *pi=new int(5); 但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内存: / ...

  4. [C++]模版特例化和模版偏特化

    函数模版特例化 例子: //第一个版本;可以比较任意两个类型 template<typename T> int compare(const &T,const T&); // ...

  5. CSP/S 2022 游寄

    初赛 HN 初赛分数线好像大 \(32\) 分左右,通过率极高!本人弱弱的拿了 \(60.5\) 分(周围的同学平均分 \(>80\).) Day -1 这一天晚上,我背了背 dijkstra, ...

  6. NSOperation的简单使用

    1.默认情况下,NSOperation并不具备封装操作的能力,必须使用它的子类,使用NSOperation子类的方式有3种: 1> NSInvocationOperation 2> NSB ...

  7. Mac对文件夹加密

    一.打开磁盘工具 电脑左上角文件->新建映像->基于文件夹新建映像->选择相对应的文件夹,进行aes加密->输入加密密码 然后保存文件就好了

  8. 万字详解,吃透 MongoDB!

    本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识.) 少部分内容参考了 MongoDB 官方文档的描述,在此说明一下. MongoDB ...

  9. drf入门规范、序列化器组件、视图组件、请求与响应

    DRF框架之入门规范 ​ 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...

  10. vulnhub靶场渗透实战15-matrix-breakout-2-morpheus

    vulnhub靶场渗透实战15-matrix-breakout-2-morpheus 靶机搭建:vulnhub上是说vbox里更合适.可能有vbox版本兼容问题,我用的vmware导入. 靶场下载地址 ...