【问题标题】:How to sort a key of a map如何对地图的键进行排序
【发布时间】:2011-01-06 05:31:59
【问题描述】:

如何对地图(树形图或哈希图)的键进行排序(任何类型的排序)

我有一个问题,它是这样的。

我有一张地图,其键为

27527-683,
27525-1179,
27525-1571,
27525-1813,
27525-4911,
27526-1303,
27526-3641,
27525-3989,
27525-4083,
27525-4670,
27526-4102,
27526-558,
27527-2411,
27527-4342

这是键列表,每个键的值都是一个列表。
现在,我如何按数字升序对该键进行排序。

例如。如果我想排序:1,2,11,20,31,3,10
我想要的输出是:1,2,3,10,11,20,31
但是当我使用树图的自动排序时,输出变为:1,10,11,2,20,3,31

如何按数字升序排序?
请帮我。我想不出办法了,因为这是我第一次处理地图和列表

【问题讨论】:

  • 可能你使用的是数字字符串。

标签: java list sorting map tree


【解决方案1】:

您的键是字符串。字符串的自然排序是按字典顺序排列的。您要么需要在 TreeMap 的构造函数中指定自定义比较器,要么使用 Integer 键。

此外,您可以更好地将 Map<Key, List<Value>> 表示为 Google Guava Multimap,例如参见 SortedSetMultimap

继续以番石榴为例:

Multimap<Integer, Person> multimap = SortedSetMultimap.create(Ordering.natural(), Ordering.arbitrary());
multimap.put(1, x);
multimap.put(1, y);
multimap.put(2, z);
multimap.put(1, a);

然后

multimap.get(1) 会以任意顺序返回一个包含 [x, y, a] 的集合。 multimap.keys() 将返回一组有序的 [1, 2]。

【讨论】:

    【解决方案2】:

    您的键目前是字符串,您似乎更愿意像整数一样处理。正如这里的许多人所建议的那样,您将需要重新制定处理地图对象的方式(这可能是正确的方法)。一种更简单的方法是使用您复制的键列表。

    我看到有一种方法可以输出键列表。随意排序。数组和列表可以通过运行时环境中的内置命令轻松排序。您可能必须先在连字符处拆分这些元素。

    我推荐一本关于数据结构的书。

    【讨论】:

      【解决方案3】:

      使用SortedMap,例如,java.util.TreeMap

      【讨论】:

        【解决方案4】:

        关键字:SortedMap

        SortedMap<Integer, Integer> s = new TreeMap<Integer, Integer>();
        
        s.put(1, 1);
        s.put(4, 2);
        s.put(2, 3);
        System.out.println(s); //{1=1, 2=3, 4=2}
        

        也看看这个example

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 2016-08-24
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 2020-06-25
          相关资源
          最近更新 更多