java HashMap 排序 <String,Integer> 。如何排序? [复制]

Posted

技术标签:

【中文标题】java HashMap 排序 <String,Integer> 。如何排序? [复制]【英文标题】:java HashMap sorting <String,Integer> . How to sort it? [duplicate] 【发布时间】:2012-08-27 02:40:51 【问题描述】:

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

在我的项目中,我采用了这样的 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

我该怎么做?

【问题讨论】:

在我看来,根据整数值排序的原始 HashMap 实际上就像 a = 5, f = 5, c = 4, e = 3, b = 2, d = 2 . 看看***.com/questions/109383/… 【参考方案1】:
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

for("your Object" m : degree.values())

      sortedHashMap.add(m);


collections.sort(sortedHashMap);

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

【讨论】:

【参考方案2】:

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

如果您想按值的排序顺序准备一个排序列表,您必须创建一个适当的对象,例如 ArrayList&lt;Map.Entry&lt;String,Integer&gt;&gt;,遍历您的 HashMap 并插入所有条目,然后使用排序功能调用Collections.sort

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

如果它正在查看值,最好不要计划在该 TreeMap 上调用 .get()。

以上是关于java HashMap 排序 <String,Integer> 。如何排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何实现Java中hashmap的value值是对象的时候的排序

Java HashMap工作原理及实现

java HashMap 排序 <String,Integer> 。如何排序? [复制]

HashMap 上的 Java 8 Map Reduce 作为 lambda

Java 流 - 将列表排序为列表的 HashMap

Java HashMap 按键插入时间排序 - 创意顺序 [重复]