如何对地图的键进行排序

时间:2011-01-06 05:31:59

标签: java list sorting map tree

如何排序(任何类型的排序)地图的关键字(树形图或散列图)

我有一个问题就是这样。

我有一张

键的地图

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
但是当我使用treemap的autosort输出时:1,10,11,2,20,3,31

我怎么能按数字升序排序?
请帮我。我想不出办法,因为这是我第一次处理地图和清单

4 个答案:

答案 0 :(得分: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]。

答案 1 :(得分:0)

使用 SortedMap ,例如java.util.TreeMap

答案 2 :(得分:0)

关键字: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

答案 3 :(得分:0)

您的密钥当前是字符串,您可能会像Integers一样处理。你将需要重新制定你如何处理地图对象,正如这里的许多人所建议的那样(这可能是正确的方法)。一种更简单的方法是使用您复制我们的密钥列表。

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

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

相关问题