java中的TreeMap

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结合,指定比较规则
相关推荐
普通网友1 分钟前
【python】pyspark.errors.exceptions.base.PySparkRuntimeError [JAVA_GATEWAY_EXITED] Java gateway proce
java·python·gateway
zavoryn2 分钟前
Python 面试高频:装饰器、迭代器、生成器和上下文管理器一次讲清
开发语言·python·面试
basketball6164 分钟前
C++ 高级编程:1. 多线程基本操作
开发语言·c++
rqtz1 小时前
【机器人】ROS结合Qt开发上位机软件工作空间配置
开发语言·qt·ros
许彰午8 小时前
14_Java泛型完全指南
java·windows·python
智慧物业老杨9 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194029 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员9 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
小欣加油11 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
代码中介商11 小时前
C++左值与右值:核心判断法则详解
开发语言·c++