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;
}
} ```

最新文章

  1. 如何使用Linux命令行查看Linux服务器内存使用情况?
  2. java web学习总结(十二) -------------------Session
  3. 【jQuery】【转】jQuery中的trigger和triggerHandler区别
  4. 解决win8下chrome浏览器打开提示没有注册类的方法
  5. URAL 1876 Centipede&#39;s Morning(数学)
  6. 16位的MD5加密和32位MD5加密的区别
  7. 【转载】关于ActionContext.getContext().getParameters()获值问题
  8. Delphi各个版本和发展历史(转)
  9. JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】
  10. C语言判断系统数据大/小端存储方式
  11. android高仿微信UI点击头像显示大图片效果
  12. vs2005 测试 lua环境
  13. Docker下redis的主从、持久化配置
  14. UVA1658:Admiral
  15. 浏览器和服务器实现跨域(CORS)判定的原理
  16. Kotlin入门(25)共享参数模板
  17. SpringMVC - 1.快速入门
  18. idea 修改单个文件的 编码格式
  19. 【linux】——ubuntu12.04 下安装wine和wine乱码解决方案
  20. PLSQL_通过UTL_MAIL发送并发程式结果报表至用户邮箱(案例)

热门文章

  1. 【转载】WebBrowser控件的常用方法、属性和事件
  2. [机器学习] PCA主成分分析原理分析和Matlab实现方法
  3. 原生js实现jsonp
  4. MySQL join语句怎么优化?
  5. ACWJ_00扫描器
  6. vh 存在问题?试试动态视口单位之 dvh、svh、lvh
  7. 论文翻译:2022_PercepNet+: A Phase and SNR Aware PercepNet for Real-Time Speech Enhancement
  8. File、FileReader、Base64、Blob基本使用以及Buffer、ArrayBuffer之间的转换
  9. Emacs Client启动方式,在WSL像VIM一样操作
  10. 多变量两两相互关系联合分布图的Python绘制