HaspMap 排序案例
已知一个 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,对的,就是他,他是Map 结构,也是链表结构,有序的,更可喜的是他是 HashMap 的子类,所以我们返回LinkedHashMap<Integer,User>即可,还符合面向接口(父类编程的思想)。
但凡是对集合的操作,我们应该保持一个原则就是能用 JDK 中的 API 就有 JDK 中的 API,比如排序算法我们不应该去用冒泡或者选择,而是首先想到用 Collections 集合工具类。
package com.baizhi.entity;
import java.util.*;
public class TestUser {
public static void main(String[] args) {
HashMap<Integer, User> map = new LinkedHashMap<>();
map.put(1,new User("zhangsan",25));
map.put(2,new User("lisi",18));
map.put(3,new User("wangwu",23));
System.out.println(map);
HashMap<Integer, User> hashMap = sortHaxhMap(map);
System.out.println(hashMap);
}
public static HashMap<Integer, User> sortHaxhMap(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 进行排序,排序规则使用匿名内部类来实现
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> hashMap = new LinkedHashMap<>();
//将 List 中的数据存储在 LinkedHashMap 中
for (Map.Entry<Integer, User> integerUserEntry : list) {
hashMap.put(integerUserEntry.getKey(),integerUserEntry.getValue());
}
//返回结果
return hashMap;
}
}
作者:ヾ安安稳稳 T
来源:优快云
原文:https://blog.youkuaiyun.com/weixin_44149063/article/details/86175287
版权声明:本文为博主原创文章,转载请附上博文链接!