TreeMap集合
java
package dailyTest;
import javax.persistence.criteria.CriteriaBuilder;
import java.util.StringJoiner;
import java.util.TreeMap;
import java.util.function.BiConsumer;
/**
* @author
* @createtime 2023/9/13 10:03
*/
public class A03_TreeMapDemo3 {
public static void main(String[] args) {
/**
* 需求:字符串"aababcabcdabcde"
* 请统计字符串中每一个字符出现的次数,并按照一下格式输出
* a(5)b(4)c(3)d(2)e(1)
* 分析:
* 统计 ---->计数器思想
* HashMap
* TreeMap
* 键:要统计的内容
* 值:表示次数
* 如果题目中没有要求对结果进行排序,默认使用HashMap
* 如果题目中要求对结果进行排序,使用TreeMap
*/
//1.定义字符串
String s = "aababcabcdabcde";
//2.创建集合
TreeMap<Character, Integer> tm = new TreeMap<>();
//2.遍历字符串得到里面的每一个字符串
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//拿着c到集合中判断是否存在
//存在,表示当前字符又出现了一次
//不存在,表示当前字符是第一次出现
if(tm.containsKey(c)){
//存在
//先把已经出现的次数拿出来
int count = tm.get(c);
//当前字符又出现了一次
count++;
tm.put(c,count);
}else {
//不存在
tm.put(c,1);
}
System.out.println(c);
//4.遍历集合,并按照指定的格式进行拼接
//StringBuilder
//StringJoiner
//a(5)b(4)c(3)d(2)e(1)
StringBuilder sb = new StringBuilder();
tm.forEach(new BiConsumer<Character, Integer>() {
@Override
public void accept(Character key, Integer value) {
sb.append(key).append("(").append(value).append(")");
}
});
System.out.println(sb);
// StringJoiner sj = new StringJoiner("","","");
// tm.forEach(key,value);
}
}
}
总结:
1.TreeMap集合的特点是怎么样的?
- 不重复、无索引、可排序
- 底层基于红黑树实现排序,增删改查性能较好
2.TreeMap集合排序的两种方式
- 实现Comparble接口,指定比较规则
- 创建集合时传递Comparator结合,指定比较规则