如何按值对 HashMap 进行排序
正如我们在文章中看到的如何对 ArrayList 进行排序1) 使用 Comparator 排序并将结果放在 TreeMap
为什么要将 Comparator 类的实例作为参数传递到 TreeMap 构造函数中? 仅仅因为 TreeMapimport java.util.Comparator 排序的;
import java.util.HashMap;
import java.util.Map;
导入 java.util.TreeMap;
public class Tri {
public static void main(String[] args) {
HashMapmap = new HashMap ();
Comparator comp = new Comparator(map);
TreeMapmap_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(HashMapmap) {
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) {run:
HashMapmap = 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;
}
排序前:{D=5.7,E=76.8,F=86.2,A=18.5,B=84.6,C=24.1}要按降序排序,只需更改 compare:
排序后:{D=5.7,A=18.5,C=24.1,E=76.8, B=84.6, F=86.2}
引用:return(o2.getValue()).compareTo( o1.getValue());
Oracle 文档 - HashMap
TutorialsPoint - HashMap 类
Documentation Comparator