【问题标题】:How to sort a HashMap if both have same key?如果两者具有相同的键,如何对 HashMap 进行排序?
【发布时间】:2020-03-26 22:35:44
【问题描述】:

我有一个哈希图,它具有相同的值但不同的键。我想对它们进行排序,这将如何实现?

这个Hashmap的图片在下面

HashMap Image

public static HashMap<String,Integer> entry = new HashMap<>();

【问题讨论】:

  • 这能回答你的问题吗? How to sort a HashMap in Java
  • 感谢您的帮助,但问题是 hashmap 的值与 diff 键相同。
  • 您想按什么排序?键还是值?

标签: android sorting hashmap


【解决方案1】:

使用TreeMap进行按键排序

使用以下代码按值排序:

private static HashMap sortByValues(HashMap map) { 
       List list = new LinkedList(map.entrySet());
       // Defined Custom Comparator here
       Collections.sort(list, new Comparator() {
            public int compare(Object o1, Object o2) {
               return ((Comparable) ((Map.Entry) (o1)).getValue())
                  .compareTo(((Map.Entry) (o2)).getValue());
            }
       });

       // Here I am copying the sorted list in HashMap
       // using LinkedHashMap to preserve the insertion order
       HashMap sortedHashMap = new LinkedHashMap();
       for (Iterator it = list.iterator(); it.hasNext();) {
              Map.Entry entry = (Map.Entry) it.next();
              sortedHashMap.put(entry.getKey(), entry.getValue());
       } 
       return sortedHashMap;
  }

详情请查看here

这里有一些在 Java 中按键和值对 HashMap 进行排序的好例子。

【讨论】:

    【解决方案2】:

    HashMap 并不是为了让条目保持有序,但如果你必须根据键或值对 HashMap 进行排序,你可以在 Java 中做到这一点。根据键对 HashMap 进行排序非常简单,您只需通过从 HashMap 中复制条目来创建 TreeMap。 TreeMap 是 SortedMap 的一个实现,并保持键的自然顺序或创建 TreeMap 时提供的 Comparator 指定的自定义顺序。这意味着您可以按排序顺序处理 HashMap 条目,但您不能传递包含按特定顺序映射的 HashMap,这是不可能的,因为 HashMap 不保证任何排序。另一方面,按值对 HashMap 进行排序相当复杂,因为没有直接的方法来支持该操作。您需要为此编写代码。为了按值对 HashMap 进行排序,您可以首先创建一个 Comparator,它可以根据值比较两个条目。然后从 Map 中获取条目集,将 Set 转换为 List 并使用 Collections.sort(List) 方法通过传递您的自定义值比较器按值对条目列表进行排序。这类似于在 Java 中对 ArrayList 进行排序。现在已经完成了一半的工作。现在创建一个新的 LinkedHashMap 并向其中添加已排序的条目。由于 LinkedHashMap 保证了映射的插入顺序,您最终将拥有一个按值排序的 Map。

    这里有详细信息: https://www.java67.com/2015/01/how-to-sort-hashmap-in-java-based-on.html

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多