已知一个 HashMap<String,Integer>集合,要求对 HashMap 中的 Integer类型进行倒序排序。排序时 key=value 键值对不得拆散。
注意:要做出这道题必须对集合的体系结构非常的熟悉。HashMap本身就是不可排序的,但是该题偏偏让HashMap排序,那我们就得想在API中有没有这样的 Map 结构是有序的,我们不难发现其中LinkedHashMap就具有这样的结构,是链表结构有序的,更可喜的是他是 HashMap的子类,我们返回LinkedHashMap<String,Integer>即可,还符合面向接口编程的思想。
但凡是对集合的操作,我们应该保持一个原则就是能用JDK中的API就用JDK中的 API,比如排序算法我们不应该去用冒泡或者选择,而是首先想到用 Collections 集合工具类。
package com.aaa.javase;
import com.aaa.javase.pojo.User;
import java.util.*;
@SuppressWarnings("all")
public class Test02 {
public static void main(String[] args) {
HashMap<String,Integer> hashMap=new HashMap<>();
hashMap.put("a",3);
hashMap.put("b",5);
hashMap.put("d",1);
hashMap.put("f",2);
hashMap.put("e",4);
HashMap<String, Integer> stringIntegerHashMap = sortHashMap(hashMap);
System.out.println(stringIntegerHashMap);
}
public static HashMap<String,Integer> sortHashMap(HashMap<String,Integer> map){
Set<Map.Entry<String, Integer>> set = map.entrySet();
List<Map.Entry<String, Integer>> list=new ArrayList<>(set);
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
linkedHashMap.put(entry.getKey(), entry.getValue());
}
return linkedHashMap;
}
}