import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.TreeMap;
public class SortMapByValue {
public static void main(String[] args){
TreeMap<String,Integer> newMap=new TreeMap<String,Integer>();
newMap.put("aaa10", 1);
newMap.put("aaa9", 5);
newMap.put("aaa4", 4);
newMap.put("aaa7", 7);
newMap.put("aaa6", 6);
newMap.put("aaa3", 3);
newMap.put("aaa10", 10);
ByValueComparator bvc =new ByValueComparator(newMap);
List<String> newList=new ArrayList<String>(newMap.keySet());
Collections.sort(newList, bvc);
for(String str:newList){
System.out.println(str+".........................."+newMap.get(str));
}
}
/**
* @description
* 对Map按值进行排序
*
* */
static class ByValueComparator implements Comparator<String> {
TreeMap<String, Integer> base_map;
public ByValueComparator(TreeMap<String, Integer> base_map) {
this.base_map = base_map;
}
public int compare(String arg0, String arg1) {
if (!base_map.containsKey(arg0)||!base_map.containsKey(arg1)) { //这个判断让我很不解,很头疼,为什么把这改== 就不排序了呢,
//这个代码的意思是不是base_map.containsKey(arg0),如果集合里
//不包含这个键的话,就return 0 , return 0 就是添加不进去值。
//我这样理解对不对呢? 如果是这样的话,这个让我想不出来起到什么作用了,而现在它有很大的用,不用这个代码就不排序了。
return 0;
}
if (base_map.get(arg0) > base_map.get(arg1)) {
return 1;
} else if (base_map.get(arg0) == base_map.get(arg1)) {
return 0;
} else {
return -1;
}
}
}
}
我注解那块判断不太懂,希望高手能解答。 解答的时候最好细点解答,要不听不懂的。。。 |