JAVA HashMap 排序

java HashMap sorting <String,Integer> . How to sort it?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to sort a Map on the values in Java?

在我的项目中,我取了这样的哈希图

HashMap degree = new HashMap();

假设我有:

1
2
3
4
5
6
degree.put("a",5);
degree.put("b",2);
degree.put("c",4);
degree.put("d",2);
degree.put("e",3);
degree.put("f",5);

Now I have to Sort this list according to given Integer values

排序后的哈希图应为:

{a=5, f=5, c=4, e=4, b=4, d=2}

我该怎么做?


HashMap是一个无序的集合。它没有排序顺序。即使是TreeMap也会按键排序,而不是按值排序。

如果要按值的排序顺序准备排序列表,则必须创建适当的对象,如ArrayList>,迭代HashMap并插入所有条目,然后使用排序函数调用Collections.sort


如果你想要排序的映射,hashmap不是最好的方法。

我建议在分类时看一下TreeMap。您可以设置比较器来比较值而不是键,正如在这个答案中所做的那样:

https://stackoverflow.com/a/1283722/975959


1
2
3
4
5
6
7
8
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

for("your Object" m : degree.values())
{
      sortedHashMap.add(m);
}

collections.sort(sortedHashMap);

所以,您可以将哈希图打印为已排序的哈希图!


您可以执行插入排序,从原始散列图构建新的散列图(占用x2内存,效率非常低)。因此,您需要使用hashmap的.get()和.set()方法,几乎是n*n(最坏情况)次,其中n是元素数。