char数组中的字符数按降序排列

use*_*652 -3 java hashmap

有一个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实现).

gon*_*nzo 7

再次尝试使用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)

希望这可以帮助!