使用Map排序


1. Map按值排序

我們都知道TreeMap可以按key自動排序,有時候我們也會遇到需要按value排序的情況。首先需要明確的一點是, TreeMap無法完成按value排序的功能因此遇到按值排序的需求沒有必要使用TreeMap, 因為強行使用TreeMap將會按key排序,這個排序過程對我們的需求沒有幫助並且會降低效率。

一個解決問題的思路是,使用HashMap存儲數據,然后大致的思路是把Map的EntrySet轉換成list,然后使用Collections.sort排序, 根據排序需求改寫comparator

代碼如下

 1 import java.util.*;
 2 
 3 
 4 public class Map按值排序 {
 5     /*
 6     * 大致的思路是把Map的EntrySet轉換成list,然后使用Collections.sort排序, 根據排序需求改寫comparator*/
 7     public static void main(String[] args) {
 8 
 9         Map<String,Integer> map = new HashMap<>();
10         map.put("a", 4);
11         map.put("d", 3);
12         map.put("b", 2);
13         map.put("c", 1);
14 
15         List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
16         //按值的升序排列:
17         //1. 匿名函數寫法:
18 /*        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {
19             //升序排序
20             public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
21                 return o1.getValue().compareTo(o2.getValue());//升序
22                 //return o1.getValue().compareTo(o2.getValue());//降序
23             }
24         });*/
25 
26         //2. lambda表達式寫法:
27         //按value升序
28         //Collections.sort(list, (Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)->o1.getValue().compareTo(o2.getValue()));
29         //按value降序
30         //Collections.sort(list, (Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)->o2.getValue().compareTo(o1.getValue()));
31 
32 //        3.精簡寫法 默認升序排列,若要按value降序用上面的lambda表達式
33         Collections.sort(list, Comparator.comparing(Map.Entry<String, Integer>::getValue));
34 
35 
36         for (Map.Entry<String, Integer> e: list) {
37             System.out.println(e.getKey()+":"+e.getValue());
38         }
39 
40     }
41 }

 

2. TreeMap按key 升序排序

TreeMap在插入數據的時候是可以通過指定比較器來實現不同的按key排序規則的,默認的規則是按key升序排序,下面的程序可以實現按key降序排序:

 1 import java.util.Comparator;
 2 import java.util.TreeMap;
 3 
 4 public class treeMap按key降序排列 {
 5     public static void main(String[] args) {
 6         //默認的TreeMap升序排列
 7         //重寫comparator完成降序排序
 8 //        1.匿名函數
 9         /*        TreeMap<Integer,Integer> map2= new TreeMap<>(new Comparator<Integer>(){
10          *//*
11          * int compare(Object o1, Object o2) 返回一個基本類型的整型,
12          * 返回負數表示:o1 小於o2,
13          * 返回0 表示:o1和o2相等,
14          * 返回正數表示:o1大於o2。
15          *//*
16             public int compare(Integer a,Integer b){
17                 return b-a;
18             }
19         });*/
20 
21 //        2.lambda表達式
22 //        TreeMap<Integer, Integer> map2 = new TreeMap<>((Integer a, Integer b) -> b - a);
23 //        簡寫
24         TreeMap<Integer, Integer> map2 = new TreeMap<>(Comparator.reverseOrder());
25 
26         map2.put(1, 2);
27         map2.put(2, 4);
28         map2.put(7, 1);
29         map2.put(5, 2);
30         System.out.println("Map2=" + map2);
31 
32     }
33 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM