7

可能重复:
如何对 Java 中的值对 Map<Key, Value> 进行排序?

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

HashMap 度 = 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

4 回答 4

11

AHashMap是一个无序集合。它没有排序顺序。甚至 aTreeMap都会按键排序,而不是按值排序。

如果要按值的排序顺序准备排序列表,则必须创建一个适当的对象,例如ArrayList<Map.Entry<String,Integer>>,遍历HashMap并插入所有条目,然后Collections.sort使用排序规则函数调用。

于 2012-09-01T16:50:00.893 回答
4

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

我建议看看TreeMap它是排序的。您可以将比较器设置为比较值而不是键,就像在此答案中所做的那样:

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

于 2012-09-01T16:52:36.650 回答
1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

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

collections.sort(sortedHashMap);

所以,你可以将你的 hashMap 打印为 sorted hashMap!

于 2012-09-01T17:03:24.347 回答
0

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

于 2012-09-01T16:56:36.337 回答