HashMap的排序面试题
1.首先声明一下,本人小白一枚,有写错的地方望大佬指正!
我们来看一下实试题要求
已知有一个HashMap<Integer,User> 集合 ,User 有 name(String),age(Integer)两个属性。请写一个方法实现HashMap的饿排序功能,方法的参数为HashMap<Integer,User> , 返回值类型为HashMap<Integer,User>,要求按照HashMap中的User的age进行倒序进行排序 ,排序时 key=value不能拆散。
注意:HashMap有一个子类是LinkedHashMap 他是有序的并且我们利用它来完成我们的题目要求
public class HashMapTest{
public static void main(String[] args){
HashMap<Integer,User> userMap = new HashMap<>();
//这里我们实体类就不写了直接给map添加元素
userMap .put(1,new User("张三“,18));
userMap .put(3,new User("张三“,190));
userMap .put(2,new User("张三“,15));
System.out.println("==========排序前===========")
System.out.println(userMap);
System.out.println("==========排序后===========")
System.out.println(sortHashMap(userMap))
}
public ststic HashMap<Integer,User> sortHashMap(HashMap<Integer,User> map){
//1.首先我们需要把map中的键值对拿出来
Set<Map.Entry<Integer,User>> entrySet = map.entrySet();
//2.我们把Set集合转变成List集合 为什么? 后面直接用集合工具包
ArrayList<Map.Entry<Integer,User>> entryList = new ArrayList<Map.Entry<Integer,User>>(entrySet);
//3.现在我们来使用Collections来进行排序
Collections.sort(entryList , new Comparator(Map.Entry<Integer,User>){
@Override
public int compare(Map.Entry<Integer,User> o1,Map.Entry<Integer,User> o2){
//排序条件 这里我们按照要求来排序
return o1.getValue.getAge - o2.getValue.getAge;
}
} );
//4.好了现在我们的entryList已经排好序了,我们创建一个LinkedHashMap来储存entryList中的元素
LinkedHashMap linkedHashMap = new LinkedHashMap<>();
for(Map.Entry<Integer,User> entry,entryList){
linkedHashMap.put(entry.getKey,entry.getValue);
}
//直接返回linkedHashMap
return linkedHashMap;
}
}
祝大家面试顺利!!