java HashMap排序<string,integer>。如何排序?</string,integer>

时间:2012-09-01 16:45:27

标签: java sorting hashmap

  

可能重复:
  How to sort a Map<Key, Value> on the values in Java?

在我的项目中,我采用了像这样的HashMap

  

HashMap degree = new HashMap();

假设我有:

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

现在我必须根据给定的整数值

对此列表进行排序

排序的HashMap应该是:

  

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

我该怎么做?

4 个答案:

答案 0 :(得分:11)

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

如果要按值的排序顺序准备排序列表,则必须创建适当的对象,例如ArrayList<Map.Entry<String,Integer>>,迭代HashMap并插入所有条目,然后使用整理功能调用Collections.sort

答案 1 :(得分:4)

如果你想要排序地图,HashMap不是最好的方法。

我建议你仔细查看TreeMap。您可以将比较器设置为比较值而不是键,如下所示:

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

答案 2 :(得分:1)

ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

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

collections.sort(sortedHashMap);

所以,您可以将hashMap打印为已排序的hashMap!

答案 3 :(得分:0)

你可以insertion sort从原始构建一个新的hashmap(占用x2内存并且效率非常低)。因此,您需要使用hashmap的.get()和.set()方法,接近n * n(最坏情况)次,其中n是元素数。