如何按值对 HashMap 进行排序

正如我们在文章中看到的如何对 ArrayList 进行排序。在本教程中,我们将学习如何在 java 中按升序和降序对 HashMap 进行 排序。这与 ArrayList.  中几乎相同;我们将创建一个名为Comparator”的类来实现该接口。比较器 

1) 使用 Comparator 排序并将结果放在 TreeMap

为什么要将 Comparator 类的实例作为参数传递到 TreeMap 构造函数中? 仅仅因为 TreeMap将 Map 接口实现为 HashMap,并具有 TreeMap(Comparator comp) 构造函数。唯一的区别是 TreeMap 是按 keys.

import java.util.Comparator 排序的;
import java.util.HashMap;
import java.util.Map;
导入 java.util.TreeMap;

public class Tri {

public static void main(String[] args) {

HashMap map = new HashMap();
Comparator comp = new Comparator(map);
TreeMap map_apres = new TreeMap(comp);

map.put(A”,49);
map.put(B”,18);
map.put(C”,92);
map.put(D”,37);
map.put(E”,62);

System.out.println(排序前:”+map);
map_apres.putAll(地图);
System.out.println(排序后:”+map_apres);
}
}

class Comparator 实现 Comparator {

Map元组;
public Comparator(HashMap map) {
this.tuple = map;
}

//这个比较器按降序对元素进行排序
@Override
public int compare(Object o1, Object o2) {
// TODO 自动生成的方法 stub
if (int) tuple.get(o1) >= (int) tuple.get(o2)) {
return -1;
} else {
返回 1;
}
}
}

2) 使用 Collections.sort

对 HashMap 进行排序在此示例中,我们将对 Double 类型的项进行排序。这些项目被复制到实现 List 接口的 LinkedList 中,然后使用 Collections.sort,我们在之前的文章中使用它来对其他对象集合进行排序。排序后,我们将排序后的元素从 LinkedList 复制到一个新的哈希表中,该哈希表将作为 output.

public static void main(String[] args) {

HashMap map = new HashMap();

map.put(A”,18.5);
map.put(E”,76.8);
map.put(C”,24.1);
map.put(F”,86.2);
map.put(D”,5.7);
map.put(B”,84.6);

System.out.println(排序前:”+map);
System.out.println(排序后:”+sortWithValue(map));
}

public static HashMap<字符串,双>sortWithValue( 哈希地图<字符串,双>map ){
列表<地图条目<字符串,双>>list =
new LinkedList<地图条目<字符串,双>>( map.entrySet() );
Collections.sort( 列表,新比较器<地图条目<字符串,双>>(){
public int compare( Map.Entry<字符串,双>o1,Map.Entry<字符串,双>o2 ){
return (o1.getValue()).compareTo( o2.getValue());
}
});

哈希图<字符串,双>map_apres = 新的 LinkedHashMap<字符串,双>();
for(Map.Entry<字符串,双>条目 : list)
map_apres.put( entry.getKey(), entry.getValue() );
返回map_apres;
}
run:

排序前:{D=5.7,E=76.8,F=86.2,A=18.5,B=84.6,C=24.1}
排序后:{D=5.7,A=18.5,C=24.1,E=76.8, B=84.6, F=86.2}
要按降序排序,只需更改 compare:

return(o2.getValue()).compareTo( o1.getValue());
引用:
Oracle 文档 - HashMap
TutorialsPoint - HashMap 类
Documentation Comparator
LinkedHashMap 文档