【数据结构】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());}
}

相关内容

热门资讯

cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...