【问题标题】:java HashMap sorting <String,Integer> . How to sort it? [duplicate]java HashMap 排序 <String,Integer> 。如何排序? [复制]
【发布时间】: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}

我该怎么做?

【问题讨论】:

标签: java sorting hashmap


【解决方案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://stackoverflow.com/a/1283722/975959

        【讨论】:

        • 如果它正在查看值,最好不要计划在该 TreeMap 上调用 .get()。
        猜你喜欢
        • 1970-01-01
        • 2011-07-10
        • 2018-08-08
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        相关资源
        最近更新 更多