Sorting a HashMap based on Value then Key?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to sort a Mapon the values in Java?
有一个HashMap的类型:
《HashMap包含一列表的字符串和整数是一个计数器的数小时,字符串已被发现。什么是我想做的是能够代表黑色的基于HashMap的integers,然后在字母顺序的字符串。
在弯矩调幅保鲜的纪录:"最大的发生(一个字命名变量的最大值)和《displaying AA follows:
1 2 3 4 5 6 7 8 9 10 |
这不alphabetically黑色的值,它也accesses HashMap的马克斯·H(尺寸)表示。
什么是更好的解决方案吗?
这是一个使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class ValueThenKeyComparator<K extends Comparable<? super K>, V extends Comparable<? super V>> implements Comparator<Map.Entry<K, V>> { public int compare(Map.Entry<K, V> a, Map.Entry<K, V> b) { int cmp1 = a.getValue().compareTo(b.getValue()); if (cmp1 != 0) { return cmp1; } else { return a.getKey().compareTo(b.getKey()); } } } |
您可以将所有映射条目放入一个列表中,然后对其进行排序:
1 2 |
看看谷歌的番石榴图书馆。它有一个
您需要做的只是用字符串填充
也许不是最优雅的解决方案,但是这个怎么样?
1 2 3 4 5 6 7 8 9 10 11 | //TreeSet with reversed natural ordering (big integers first) Map<Integer, Set<String>> h = new TreeMap<Integer, Set<String>>(Collections.reverseOrder()); //and use TreeSet for the set... // ... // for(Map.Entry<Integer,Set<String>> entry : h.entrySet()){ for(String str : entry.getValue()){ System.out.println(str +" has occured" + entry.getKey() +" times."); } } |
可以使用sortedmap接口对哈希图进行排序。这很容易-自动分类。请参阅http://java.sun.com/j2se/1.4.2/docs/api/java/util/sortedmap.html。我这里没有包含任何代码,但如果您需要,只需添加一个注释。我给你一个示例代码。