如何在java中对MultiMap <k,v>进行排序?</k,v>

时间:2008-11-05 04:53:53

标签: java

是否有理由在Java中对MultiMap进行排序以及如何进行排序?

3 个答案:

答案 0 :(得分:1)

假设你在谈论org.apache.commons.collections.MultiMap,那么你不能;因为它返回Collection而不是List,所以它不支持订单的概念。

如果您正在谈论org.apache.commons.collections.MultiHashMap,那么您需要做的就是遍历密钥,返回ArrayList并使用Collections.sort()对其进行排序。

假设您正在使用that implementation though

虽然支持排序列表,但没有什么可以阻止您轻松实现自己的MultiMap。它可能就像HashMap<K, Collection<V>>一样简单,我不熟悉MultiMaps的工作原理。

答案 1 :(得分:1)

实际上我不知道你为什么要对Map进行排序。 Map是一个字典,您可以从这个字典中检索一个(或者在多个映射的情况下是您感兴趣的值的集合)。

对于MultiMap,您可能希望对get产生的Collection进行排序。但是你有一个有条理的地图有什么优势,因为它没有加速寻找特定值的任何东西?

答案 2 :(得分:0)

最简单的解决方案是使用番石榴的TreeMultimap。直接使用

TreeMultimap<...> sortedMap = TreeMultimap.create(notSortedMultiMap);

如果你的键和值可以自然排序(实现Comparable),或者

TreeMultimap<...> sortedMap = TreeMultimap.create(keyComparator, valueComparator);
sortedMap.putAll(notSortedMultiMap);

如果您需要提供自定义比较器。

如果你知道你需要对它进行排序而不关心检索速度那么多,你当然可以从一开始就使用TreeMap。

然后,您可以迭代TreeMap或使用类似值()或条目来获取已排序的集合。