TreeMap的使用

简介: TreeMap的使用

1、简介

TreeMap是红黑二叉树的典型实现。我们打开TreeMap的源码,发现里面有一行核心代码:
root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码:
在这里插入图片描述
可以看到里面存储了本身数据、左节点、右节点、父节点、以及节点颜色。

二、使用

1、简单使用

TreeMap会对存入的key进行排序;

TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(20,"aa");
treeMap.put(30,"bb");
treeMap.put(10,"cc");
for (Integer key : treeMap.keySet()) {
    System.out.println(key+"==="+treeMap1.get(key));
}

结果为:

在这里插入图片描述

2、key为对象

TreeMap对key的对象,按照给定的compareTo方法进行排序存到TreeMap中。取出来就是有序的;

public class TestTreeMap {
    public static void main(String[] args) {
        TreeMap<Emp, String> treeMap = new TreeMap<>();
        treeMap.put(new Emp(100, "张三", 1000), "张三是个好员工");
        treeMap.put(new Emp(200, "李四", 2000), "李四是个好员工");
        treeMap.put(new Emp(300, "王五", 3000), "王五是个好员工");
        treeMap.put(new Emp(400, "赵六", 2000), "赵六是个好员工");

        for (Emp key : treeMap.keySet()) {
            System.out.println(key + "====" + treeMap.get(key));
        }
    }
}

Emp对象:

class Emp implements Comparable<Emp> {
    int id;
    String name;
    double salary;

    public Emp(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    @Override
    public int compareTo(Emp o) {
        //大于1;等于1;小于-1;
        if (this.salary > o.salary) {
            return 1;
        } else if (this.salary < o.salary) {
            return -1;
        } else {
            if (this.id > o.id) {
                return 1;
            } else if (this.id < o.id) {
                return -1;
            } else if (this.id == o.id) {
                return 0;
            }
        }
        return 0;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}

结果为:
在这里插入图片描述

目录
相关文章
|
10月前
|
编解码 Cloud Native 算法
通义万相:视觉生成大模型再进化
通义万相是阿里云推出的视觉生成大模型,涵盖图像和视频生成。其2.0版本在文生图和文生视频方面进行了重大升级,采用Diffusion Transformer架构,提升了模型的灵活性和可控性。通过高质量美学标准和多语言支持,大幅增强了画面表现力。此外,视频生成方面引入高压缩比VAE、1080P长视频生成及多样化艺术风格支持,实现了更丰富的创意表达。未来,通义万相将继续探索视觉领域的规模化和泛化,打造更加通用的视觉生成大模型。
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
202 16
|
存储 人工智能 数据库
深度解读RAG技术发展历程:从基础Naive RAG 到高级Advanced,再到模块化Modular RAG的全面升级
【8月更文挑战第11天】深度解读RAG技术发展历程:从基础Naive RAG 到高级Advanced,再到模块化Modular RAG的全面升级
深度解读RAG技术发展历程:从基础Naive RAG 到高级Advanced,再到模块化Modular RAG的全面升级
|
算法 NoSQL 编译器
使用CLion进行ROS开发
1.安装基本的ROS环境   ROS环境的安装请参考安装ROS。 安装CLion 下载CLion   Linux的下载地址如下:CLion 解压CLion   将下载的CLion复制到/opt目录下(你可以解压到适合自己的文件夹,只要保证后续使用的路径一致即可),然后在这个目录下使用终端将其解压,命令如下所示(其中CLion-xxxx.xx.xx.tar.gx为下载的安装包名): sudo tar -zxvf CLion-xxxx.xx.xx.tar.gx 使用脚本安装CLion 运行解压后的文件夹中的clion.sh脚本,进行安装: 1.运行安装 2.登录激活可以选择教
452 6
|
存储 缓存 Dragonfly
如何进行容器镜像加速?| 深度揭秘阿里云 Serverless Kubernetes(3)
容器相比虚拟机最突出的特点之一便是轻量化和快速启动。相比虚拟机动辄十几个 G 的镜像,容器镜像只包含应用以及应用所需的依赖库,所以可以做到几百 M 甚至更少。但即便如此,几十秒的镜像拉取还是在所难免,如果镜像更大,则耗费时间更长。
1715 0
如何进行容器镜像加速?| 深度揭秘阿里云 Serverless Kubernetes(3)
|
算法 定位技术
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
748 0
|
Prometheus 数据可视化 Cloud Native
构建交互式的 Grafana 仪表盘
【8月更文第29天】Grafana 是一个功能强大的数据可视化工具,它支持多种数据源并能够创建高度定制化的仪表盘。通过使用交互式面板,用户可以更直观地探索数据并进行数据分析。本文将介绍如何设计和实现用户友好的交互式面板,以提高数据分析效率,并提供具体的代码示例。
941 2
|
canal 缓存 关系型数据库
MySQL如何实时同步数据到ES?试试阿里开源的Canal
MySQL如何实时同步数据到ES?试试阿里开源的Canal
550 3
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
|
存储 缓存 Linux
嵌入式Linux系统中内存分配详解
嵌入式Linux系统中内存分配详解
197 0