如何排序(任何类型的排序)地图的关键字(树形图或散列图)
我有一个问题就是这样。
我有一张
键的地图 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
我怎么能按数字升序排序?
请帮我。我想不出办法,因为这是我第一次处理地图和清单
答案 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一样处理。你将需要重新制定你如何处理地图对象,正如这里的许多人所建议的那样(这可能是正确的方法)。一种更简单的方法是使用您复制我们的密钥列表。
我看到有一种方法可以输出密钥列表。按你喜欢的方式排序。可以通过运行时环境中的内置命令轻松对数组和列表进行排序。您可能必须先在连字符处拆分这些元素。
我推荐一本关于数据结构的书。