neu*_*eut 6 java sorting hashtable hashmap
我有一个类型的HashMap:
HashMap<String, Integer> h = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)
HashMap包含一个字符串列表,而Integer是一个计数器,用于查找String的次数.我希望能够做的是根据整数对HashMap进行排序,然后按字符串的字母顺序排序.
目前我正在记录一个单词的最大出现(变量名为max)并显示如下值:
public void print(){
while(max > 0){
for (String key : h.keySet()){
if(h.get(key) == max){
System.out.println(key + " " + h.get(key));
}
}
max--;
}
}
Run Code Online (Sandbox Code Playgroud)
其中不按字母顺序对值进行排序,也访问HashMap最大*h(大小)次.
什么是更好的解决方案?
Sea*_*ean 10
这是一个用键和值对对象进行Comparator排序的方法:Map.EntryComparable
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
您将所有映射条目放入列表中,然后对其进行排序:
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(h.entrySet());
Collections.sort(list, new ValueThenKeyComparator<String, Integer>());
Run Code Online (Sandbox Code Playgroud)
看看Google Guava 库。它有一个Multiset为您进行计算的类,然后您有Ordering一个可以简化排序的类。
您需要做的就是填充Multiset字符串。它会为您保持频率。然后您可以使用对这些字符串进行排序Ordering。
| 归档时间: |
|
| 查看次数: |
15089 次 |
| 最近记录: |