【问题标题】:How to sort HashMap of arrays by integer key Java如何按整数键Java对数组的HashMap进行排序
【发布时间】:2017-04-13 07:23:32
【问题描述】:

我有一个HashMap 由整数标识的字符串数组作为键。我想按键排序这个HashMap。

我的哈希图:HashMap<Integer, String[]> htab = new HashMap<>();

我尝试了TreeMap 解决方案,但它没有与我的值兼容的构造函数 (String[]): Map<Integer, String> map = new TreeMap<Integer, String>((Comparator<? super Integer>) htab);

我的一组HashMap示例:

21 : {"2","3","5","10","0"}

【问题讨论】:

  • 如果值是字符串的数组,请使用Map<Integer, String[]> = new TreeMap<>(); 而不是Map<Integer, String>
  • 是,或者:Map tmap = new TreeMap(Htab)
  • 或者你可以使用LinkedHashMap对LinkedHashMap的实例进行排序。这是一个关于如何按值对 LinkedHashMap 进行排序和按键排序相同的示例。 link

标签: java arrays sorting hashmap


【解决方案1】:

您的 TreeMap 不需要 (Comparator<? super Integer>) 部分。此外,您在声明中使用了 String 而不是 String[]。此代码将起作用:

SortedMap<Integer, String[]> sortedMap = new TreeMap<Integer, String[]>(Htab);

或者,您也可以将 Htab 声明为 TreeMap 而不是 HashMap。

【讨论】:

    【解决方案2】:

    如果要对键进行排序,可以使用 TreeSet 或 TreeMap,如下所示。键是自然排序的,即排序由 Integer 类定义。

    Map<Integer, String[]> map = new HashMap<>();
    
    Set<Integer> naturallySortedKeys = new TreeSet<>(map.keySet());
    Map<Integer, String[]> naturallySortedMap = new TreeMap<>(map);
    

    【讨论】:

    • 他们正在寻找一个排序的映射而不是排序的键集。
    • 感谢您指出这一点。我刚刚编辑了我的答案以提供两者。
    【解决方案3】:

    只需使用HashMap 作为参数创建TreeMap

    public void test() {
        Map<Integer, String[]> htab = new HashMap<>();
        String[] a = {"a", "3", "5", "10", "0"};
        htab.put(21, a);
        String[] b = {"b", "3", "5", "10", "0"};
        htab.put(210, b);
        String[] c = {"c", "3", "5", "10", "0"};
        htab.put(2, c);
        Map<Integer, String[]> sorted = new TreeMap<>(htab);
        System.out.println(htab);
        System.out.println(sorted);
    }
    

    【讨论】:

      【解决方案4】:

      您可以按照 jesper 的评论使用 TreeMap。

          Map<Integer, String[]> map = new TreeMap<Integer, String[]>();
          map.put(21, new String[] {"abc","bcde", "regweger"});
          map.put(43, new String[] {"dbc","bgercde", "reggweer"});
          map.put(31, new String[] {"afbc","bcdrge", "rewgwger"});
          map.put(5, new String[] {"abgc","bcdee", "regwesgr"});
          map.put(98, new String[] {"abhhc","bc3gde", "regrer"});
          map.put(11, new String[] {"awqbc","bc33de", "frgeger"});
      
          System.out.println(map.toString());
      

      你会发现 to 字符串按照键值的升序打印出元素。

      【讨论】:

        猜你喜欢
        • 2017-09-22
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多