目录
1、TreeMap
1.1 TreeMap 的简介
1.2 TreeMap 的基本使用
2、TreeSet
2.1 TreeSet 的简介
2.2 TreeSet 的基本操作
假设目前我们有这样的代码:
public static void main(String[] args) {Map map = new TreeMap<>();map.put(3,2);map.put(1,3);System.out.println(map);
}
打印结果:
通过打印结果我们也可以看出TreeMap是关于key有序的
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());}}
}
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
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());}
}