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

相关内容

热门资讯

世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...