java的TreeMap可以排序,只可惜是按照key来排序的,或者重写其他Map的排序算法也都是按照key来排序的,下面贴出来一个按照value排序的算法:
public class SortMap {
public static void main(String[] args) throws Exception {
// TODO code application logic here
Map<String, Integer> myMap = new LinkedHashMap();
myMap.put("1", 1);
myMap.put("2", 4);
myMap.put("3", 3);
myMap.put("4", 9);
myMap.put("5", 6);
myMap.put("6", 2);
printMap(myMap);
myMap = sortMap(myMap);
printMap(myMap);
}
private static void printMap(Map map){
System.out.println("===================mapStart==================");
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("===================mapEnd==================");
}
public static Map sortMap(Map oldMap) {
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(oldMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Entry<java.lang.String, Integer> arg0,
Entry<java.lang.String, Integer> arg1) {
return arg0.getValue() - arg1.getValue();
}
});
Map newMap = new LinkedHashMap();
for(Map.Entry<String, Integer> map : list) {
newMap.put(map.getKey(), map.getValue());
}
return newMap;
}
}
===================mapStart==================
1:1
2:4
3:3
4:9
5:6
6:2
===================mapEnd==================
===================mapStart==================
1:1
6:2
3:3
2:4
5:6
4:9
===================mapEnd==================
代码上稍微有些小改动
该博文转载自http://blog.csdn.net/tsingheng/article/details/7909861