程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Map 依照Value排序的完成辦法

Java Map 依照Value排序的完成辦法

編輯:關於JAVA

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排序的完成辦法,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved