【问题标题】:Is that possible to sort HashMap by Arrays.sort [closed]是否可以通过 Arrays.sort 对 HashMap 进行排序 [关闭]
【发布时间】:2013-05-14 01:35:39
【问题描述】:

我想使用Arrays.sort 对数组进行排序。我知道应该由Collections.sort 完成,但是老师想要使用Arrays.sort 这可能吗? 我想通过比较器。

【问题讨论】:

  • 您也不能使用 collections.sort 对地图进行排序。
  • 您要对映射条目或值进行排序吗?
  • 您要对 ArrayList 或 HashMap 进行排序?第二个是不可能的,因为没有 sorted HashMap 之类的想法

标签: java arrays sorting collections hashmap


【解决方案1】:

你可以这样使用:

Arrays.sort(yourHashMap.entrySet().toArray());

【讨论】:

    【解决方案2】:

    您无法对HashMap 本身进行排序,因为它不能保存订单。

    您可以将键集、条目集或值集合提取到列表或数组中,然后对生成的数据结构进行排序。这是一个例子:

    HashMap<String, Integer> map = ...
    String[] orderedKeys = map.keySet().toArray(new String[map.size()]);
    Arrays.sort(orderedKeys, someStringComparator);
    

    当然,这不会影响原始Map 的键/值/条目的顺序。

    如果您希望按排序顺序维护映射中的键,则需要使用带有Comparable 键的TreeMap 或合适的Comparator ...而不是HashMap。

    【讨论】:

      【解决方案3】:

      据我所知,您不能直接使用 Collections.sort() 或 Arrays.sort() 对 Map 进行排序,但您可以使用 TreeMap 并将比较器传递给它:

              Map<Integer, String> map = new TreeMap<Integer, String>(new Comparator<Integer>() {
              @Override
              public int compare(Integer o1, Integer o2) {
                  return o1.compareTo(o2);
              }
          });
      
          map.put(1, "1");
          map.put(0, "0");
          map.put(3, "3");
          map.put(2, "2");
      
          System.out.println(map);
      

      这将打印:{0=0, 1=1, 2=2, 3=3} 所以它按键对条目进行排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多