【数据结构】TreeMap和TreeSet
创始人
2025-05-31 07:16:33

目录

1、TreeMap

1.1 TreeMap 的简介 

1.2 TreeMap 的基本使用

2、TreeSet

2.1 TreeSet 的简介 

2.2 TreeSet 的基本操作 


1、TreeMap

1.1 TreeMap 的简介 

  • TreeMap 的底层是一棵搜索树,这颗搜索树其实是红黑树
  • TreeMap 因为实现了 SortedMap 接口,所以往里放元素的时候 key 必须是可比较的,否则就会报错

  • TreeMap 关于 key 是有序的

假设目前我们有这样的代码:

public static void main(String[] args) {Map map = new TreeMap<>();map.put(3,2);map.put(1,3);System.out.println(map);
}

打印结果:

通过打印结果我们也可以看出TreeMap是关于key有序的

1.2 TreeMap 的基本使用

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class Test {public static void main(String[] args) {Map map = new TreeMap<>();//插入操作map.put("a",2);map.put("c",3);map.put("b",1);//获取 key 对应的下标int index = map.get("a");System.out.println(index);//如果 key 不存在,就返回默认值int num = map.getOrDefault("e",100);System.out.println(num);//删除操作int del = map.remove("a");System.out.println(del);//判断是否包含 keySystem.out.println(map.containsKey("a"));//判断是否包含 valueSystem.out.println(map.containsValue(1));//返回所有 key-value 映射关系Set> entrySet = map.entrySet();for (Map.Entry entry : entrySet) {System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());}}
}

2、TreeSet

2.1 TreeSet 的简介 

TreeSet 使用的模型是纯 key 模型,添加的 key 不能够重复,且关于 key 有序 

TreeMap 具有的特性 TreeSet 同样具有,唯一不同的就是 TreeMap 使用的模型是 key-value 键值对,而TreeSet 使用的是纯 key 模型。TreeMap 具有的特性 TreeSet 同样具有,主要原因就是因为 TreeSet 的底层就是 TreeMap

TreeSet 存储的 key 要求有序,原因就是 TreeMap 的 key 也是有序性的 

证明 TreeSet 的底层就是 TreeMap:

我们可以查看 TreeSet 的 add 方法的源码,来看数据是存储在哪的

 通过上述的 TreeSet 的 add 方法的源码,可以看出每次进行 add 添加元素的时候都是往 m 这个对象中进行 put 插入操作

其实通过上述调用 m.put 方法后面的参数也就基本上可以猜出,是往 TreeMap 集合对象中进行存储数据,第一个参数就是 key,第二个操作就是 value,这个 value 其实是Object 的一个默认值

上述说通过参数可以猜出是往 TreeMap 对象中插入元素,那我们接下来就通过源码来进行证明

那我们就来看一下 TreeSet 的构造方法:

 当我们实例化一个 TreeSet 类的时候,假设没参数就会通过 this 调用别的构造方法,并且实例化一个 TreeMap 传过去 

 传过来的 TreeMap 实例化被 m 接收,把这个 m 赋值给了 TreeSet 对象中的 m

上述的证明已足够证明 TreeSet 的底层就是 TreeMap 

2.2 TreeSet 的基本操作 

import java.util.Iterator;
import java.util.TreeSet;public class TreeSetTest {public static void main(String[] args) {TreeSet treeSet = new TreeSet<>();//添加元素treeSet.add(1);treeSet.add(3);treeSet.add(2);//判断 1 是否在集合中System.out.println(treeSet.contains(1));//删除集合中的 1System.out.println(treeSet.remove(1));//返回元素的个数System.out.println(treeSet.size());//判断集合是否为空System.out.println(treeSet.isEmpty());}
}

相关内容

热门资讯

游戏服务器是什么怎么租用 游戏服务器是什么怎么租用 我是艾西,作为一个常年与游戏行业保持着高频率的服务器供应商&...
Flink-转换算子  基本转换算子         map(映射)         filter(过滤&#...
2023年金三银四大厂高频Ja... Java 面试 谈到 Java 面试,相信大家第一时间脑子里想到的词肯定是金三银四&#...
C语言手撕一个Hash表(Ha... 什么是Hash Table 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表...
springMVC01- 文章目录今日目标一、SpringMVC简介1 SpringMVC概述问题导入1.1 SpringMV...
Electron开发的应用利用... 技术选型: 1、electron:21.3.3 2、electron-v...
【Elastic (ELK) ... 目录 一、ES 基本概念介绍 1.1 ES 是什么 1.2 ES 主要功能 1.3 ES 相关术语 ...
指定wb用户在指定日期范围内的... 一、操作步骤 只记录过程,不讲述原理 1.获取用户ID和cookie 用户ID在进入个...
sheng的学习笔记-IO多路... 基础概念IO分为几种:同步阻塞的BIO,同步非阻塞的NIO,...
接口自动化测试(Python+...  目录:导读 (1)接口自动化测试的优缺点 (2)Pyth...
重构条件-Consolidat... 重构条件-Consolidate Conditional Expression合并条件式二 1.合并...
【论文阅读】BiSeNet V... 前言BiSeNet V2延续了v1版本的双边结构,分别处理空间细节信息、高层语义信息。...
二、马尔可夫决策过程与贝尔曼方... 这里写目录标题1 马尔可夫性质2 马尔可夫过程3 马尔可夫奖励过程(Markov re...
golang端口重用 文章目录前言SO_REUSEADDR简介Python中的用法golang用法其他学习总结 前言 服...
Zabbix“专家坐诊”第18... 问题一 Q:Zabbix5.0版本,如图,请问这里怎么修改...
深度学习技巧应用5-神经网络中... 大家好,我是微学AI,今天给大家带来深度学习技巧应用5-神经网络中的模型...
Mongodb 常用基本语法与... 常用操作 1、 Help查看命令提示 db.help(); 2、 切换/创建数据库 use t...
java中Long型数据大小比... 起因 今天在做项目的时候,想构建一个树形结构,从数据库中查询出了所有数据...
【Linux】-- 进程概念 基本概念进程(Process):是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。...
2023-03-22干活小计: transformer: position-embedding: 残差:我也会了 ad...
verilog(基础知识) 摘要:主要写自己的学习内容,可能不完整 概述 对硬件描述,主要是对芯片设计进行验证人员对其进行验证...
MySQL函数 - 字符串函数... 文章目录1 字符串函数2 数值函数3 日期函数4 流程函数 函数是指一段可以直接被另一段程序调用的程...
Word2010(详细布局解释... 目录一、界面介绍二、选项卡1、文件选项卡(保存、打开、新建、打印、保存并发送、选项&#...
ProTradex是链上衍生品... 目前,链上衍生品市场的总市值已经超过100亿美元,链上衍生品市场的产品类...
spring boot 集成 ... 要将 PostGIS 集成到 Spring Boot 应用程序中,需要按照以下步骤进行操作:1. 将...
【DDIM精读】公式推导加代码... 【DDIM精读】公式推导加代码分析。1.前言:ddim总览2.均值(μ\...
系统开发-McCabe复杂度(... 系统开发(上)-软件设计(三十二)https...
每日学术速递3.22 CV - 计算机视觉 |  ML - 机器学习 |  RL - 强化学习 | NLP 自然语言处理 ...
CCF-CSP题解 第二题(J... 目录 201312-2:ISBN号码 201403-2:窗口 20140...
在服务器上搭建nacos集群-... 搭建集群需要具备JDK环境,1个Nginx+3个nacos注册中心+1...