Java - 使用比较器按值对树状图进行排序

集合 TreeMap 默认按其键排序,但如果需要排序TreeMap by values 那么 Java 提供了一种使用comparator.

Example:

package codeurjava;

导入 java.util.*;

class TreeMapSort {

// 按值对 TreeMap 元素进行排序
public static >Map sortByValues(final Map map) {

Comparator valueComparator = new Comparator() {
public int compare(K k1, K k2) {
int compare = map.get(k1).compareTo(map.get(k2));
if (compare == 0)
return 1;
else
return compare;
}
};

Map TreeMap_triee_par_valeur = new TreeMap(valueComparator);
TreeMap_triee_par_valeur.putAll(地图);
返回TreeMap_triee_par_valeur;
}

public static void main(String args[]) {

TreeMap treemap = new TreeMap();

// 元素
treemap.put(1”, e4”);
treemap.put(2”, e5”);
treemap.put(3”, e1”);
treemap.put(4”, e3”);
treemap.put(5”, e2”);

System.out.println(排序之前:”);

/* 使用迭代器浏览未排序的树图 */

Set set = treemap.entrySet();
迭代器 i = set.iterator();
// 显示元素
while(i.hasNext()) {
Map.Entry entry = (Map.Entry)i.next();
System.out.print(entry.getKey() + : ”);
System.out.println(entry.getValue());
}

System.out.println(排序后:”);
// 调用 sortByvalues()
Map 方法 TreeMap_triee_par_valeur = sortByValues(treemap);

/* 浏览用迭代器排序的新地图 */

set = TreeMap_triee_par_valeur.entrySet();
i = set.iterator();
// 显示元素
while(i.hasNext()) {
Map.Entry entry = (Map.Entry)i.next();
System.out.print(entry.getKey() + : ”);
System.out.println(entry.getValue());
}

}
}

Execution

排序前:
1 : e4
2 : e5
3 : e1
4 : e3
5 : e2
排序后:
3 : e1
5 : e2
4 : e3
1 : e4
2 : e5

参考资料:

Java 文档 - 比较器 (JavaSE 8)