Java Map 依照Value排序的完成辦法。本站提示廣大學習愛好者:(Java Map 依照Value排序的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Map 依照Value排序的完成辦法正文
Map是鍵值對的聚集接口,它的完成類重要包含:HashMap,TreeMap,Hashtable和LinkedHashMap等。
•TreeMap:基於紅黑樹(Red-Black tree)的 NavigableMap 完成,該映照依據其鍵的天然次序停止排序,或許依據創立映照時供給的 Comparator 停止排序,詳細取決於應用的結構辦法。
•HashMap的值是沒有次序的,它是依照key的HashCode來完成的,關於這個無序的HashMap我們要怎樣來完成排序呢?參照TreeMap的value排序。
Map.Entry前往Collections視圖。
按key排序
TreeMap默許是升序的,假如我們須要轉變排序方法,則須要應用比擬器:Comparator。Comparator可以對聚集對象或許數組停止排序的比擬器接口,完成該接口的public compare(T o1,To2)辦法便可完成排序。
留意:以下代碼均已在Jdk1.6測試經由過程了
TreeMap默許按key升序排序
public static void keyUpSort() { // 默許情形,TreeMap按key升序排序 Map<String, Integer> map = new TreeMap<String, Integer>(); map.put("acb1", 5); map.put("bac1", 3); map.put("bca1", 20); map.put("cab1", 80); map.put("cba1", 1); map.put("abc1", 10); map.put("abc2", 12); // 默許情形下,TreeMap對key停止升序排序 System.out.println("------------正常情形,TreeMap按key升序排序--------------------"); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
修正TreeMap的排序方法,按key降序排序
public static void keyDownSort() { // TreeMap,按key降序排序 // 降序排序比擬器 Comparator<String> keyComparator = new Comparator<String>() { @Override public int compare(String o1, String o2) { // TODO Auto-generated method stub return o2.compareTo(o1); } }; Map<String, Integer> map = new TreeMap<String, Integer>(keyComparator); map.put("acb1", 5); map.put("bac1", 3); map.put("bca1", 20); map.put("cab1", 80); map.put("cba1", 1); map.put("abc1", 10); map.put("abc2", 12); System.out.println("------------TreeMap按key降序排序--------------------"); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
按Value排序
以下只演示按TreeMap按Value升序排序,這異樣實用於HashMap。
修正TreeMap的排序方法,按Value升序排序
留意:正常情形下Map是弗成以應用Collections.sort()辦法停止排序的,不外可以將Map轉換成list以後再停止排序。
public static void valueUpSort() { // 默許情形,TreeMap按key升序排序 Map<String, Integer> map = new TreeMap<String, Integer>(); map.put("acb1", 5); map.put("bac1", 3); map.put("bca1", 20); map.put("cab1", 80); map.put("cba1", 1); map.put("abc1", 10); map.put("abc2", 12); // 升序比擬器 Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() { @Override public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { // TODO Auto-generated method stub return o1.getValue()-o2.getValue(); } }; // map轉換成list停止排序 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet()); // 排序 Collections.sort(list,valueComparator); // 默許情形下,TreeMap對key停止升序排序 System.out.println("------------map依照value升序排序--------------------"); for (Map.Entry<String, Integer> entry : list) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
測試成果
------------正常情形,TreeMap按key升序排序-------------------- abc1:10 abc2:12 acb1:5 bac1:3 bca1:20 cab1:80 cba1:1 ------------TreeMap按key降序排序-------------------- cba1:1 cab1:80 bca1:20 bac1:3 acb1:5 abc2:12 abc1:10 ------------map依照value升序排序-------------------- cba1:1 bac1:3 acb1:5 abc1:10 abc2:12 bca1:20 cab1:80
以上所述是小編給年夜家引見的Java Map 依照Value排序的完成辦法,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!