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<Map.Entry<String,Integer>>
,遍历您的 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 排序 <String,Integer> 。如何排序? [复制]