有一个char array下面,如图所示.需要按计数的降序打印每个字符的计数.
char arr[] = {'A', 'B', 'E', 'A', 'C', 'D', 'E', 'A', 'C', 'E', 'B', 'A', 'A', 'B','E','E'};
Run Code Online (Sandbox Code Playgroud)
寻找这个问题的有效解决方案.我尝试过HashMap,ArrayList组合.有没有办法HashMap单独执行此操作,而不使用ArrayList(或任何其他List实现).
再次尝试使用TreeMap但覆盖比较.做这样的事情:
public static void main(String[] args) {
char[] arr = {'A', 'B', 'E', 'A', 'C', 'D', 'E', 'A', 'C', 'E', 'B', 'A', 'A', 'B','E','E'};
Map<Character, Integer> map = new HashMap<>();
for (char c: arr){
if (!map.containsKey(c)){
map.put(c, 1);
}else{
map.put(c, map.get(c)+1);
}
}
ValueComparator vc = new ValueComparator(map);
Map<Character, Integer> sortedMap = new TreeMap<Character, Integer>(vc);
sortedMap.putAll(map);
System.out.println(sortedMap);
}
public class ValueComparator implements Comparator<Character> {
Map<Character, Integer> map;
public ValueComparator(Map<Character, Integer> map){
this.map = map;
}
@Override
public int compare(Character a, Character b) {
if (map.get(a) >= map.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{A=5, E=5, B=3, C=2, D=1}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!