package com.huowolf;
import java.util.HashMap;
import java.util.TreeSet;
/*
* 统计字符串中每个字母出现的次数
* 输出时要求按照次数降序排序,如果出现次数相同,按照字母升序输出
*
* HashMap:计数 TreeSet:排序
*/
public class LetterCount {
public static void main(String[] args) {
String s = "abdhjbcdahjmbda";
HashMap<Character, Integer> hm = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(hm.containsKey(c))
hm.put(c, hm.get(c)+1);
else {
hm.put(c, 1);
}
}
/*
* 遍历HashMap集合,然后把每一个键值对都包装成T对象的实例,
* 放入TreeSet集合,就完成了排序
*/
TreeSet<T> ts = new TreeSet<>();
for (Character c : hm.keySet()) {
T t = new T(c,hm.get(c));
ts.add(t);
}
for (T t : ts) {
System.out.println(t);
}
}
}
class T implements Comparable<T>{
private char c;
private int count;
public T(char c, int count) {
this.c = c;
this.count = count;
}
@Override
public int compareTo(T o) {
if (this.count!=o.count)
return o.count-this.count;
return c-o.c;
}
@Override
public String toString() {
return "字符" + c + "出现的次数:" + count ;
}
}
字符a出现的次数:3
字符b出现的次数:3
字符d出现的次数:3
字符h出现的次数:2
字符j出现的次数:2
字符c出现的次数:1
字符m出现的次数:1