这一章,我们对 TreeSet 进行学习。
我们先对 TreeSet 有个整体认识,然后再学习它的源码,最后再通过实例来学会使用 TreeSet。内容包括:
第 1 部分 TreeSet 介绍
第 2 部分 TreeSet 数据结构
第 3 部分 TreeSet 源码解析 (基于 JDK1.6.0_45)
第 4 部分 TreeSet 遍历方式
第 5 部分 TreeSet 示例
转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=
TreeSet 简介
TreeSet 是一个有序的集合,它的作用是提供有序的 Set 集合。它继承于 AbstractSet 抽象类,实现了 NavigableSet
TreeSet 继承于 AbstractSet,所以它是一个 Set 集合,具有 Set 的属性和方法。
TreeSet 实现了 NavigableSet 接口,意味着它支持一系列的导航方法。比如查找与指定目标最匹配项。
TreeSet 实现了 Cloneable 接口,意味着它能被克隆。
TreeSet 实现了 java.io.Serializable 接口,意味着它支持序列化。
TreeSet 是基于 TreeMap 实现的。TreeSet 中的元素支持 2 种排序方式:自然排序 或者 根据创建 TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
TreeSet 为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。
另外,TreeSet 是非同步的。 它的 iterator 方法返回的迭代器是 fail-fast 的。
TreeSet 的构造函数
[
](javascript:void(0)😉
[
](javascript:void(0)😉
TreeSet 的 API
[
](javascript:void(0)😉
[
](javascript:void(0)😉
说明:
(01) TreeSet 是有序的 Set 集合,因此支持 add、remove、get 等方法。
(02) 和 NavigableSet 一样,TreeSet 的导航方法大致可以区分为两类,一类时提供元素项的导航方法,返回某个元素;另一类时提供集合的导航方法,返回某个集合。
lower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
TreeSet 的继承关系
[
](javascript:void(0)😉
[
](javascript:void(0)😉
TreeSet 与 Collection 关系如下图:

从图中可以看出:
(01) TreeSet 继承于 AbstractSet,并且实现了 NavigableSet 接口。
(02) TreeSet 的本质是一个 "有序的,并且没有重复元素" 的集合,它是通过 TreeMap 实现的。TreeSet 中含有一个 "NavigableMap 类型的成员变量"m,而 m 实际上是 "TreeMap 的实例"。
为了更了解 TreeSet 的原理,下面对 TreeSet 源码代码作出分析。


[
](javascript:void(0)😉
注意看add方法:
key就是我们要保存的值,value是一个PRESENT,这是什么?
可以看到,PRESENT就是TreeSet创建时创建的一个Object对象,它的唯一作用就是占位做Value
我们也可以从中看出,TreeSet真的是很依赖于TreeMap,许多方法干脆就是直接调用TreeMap中的同类方法,算是一个比较“浅”的子类吧
总结:
(01) TreeSet 实际上是 TreeMap 实现的。当我们构造 TreeSet 时;若使用不带参数的构造函数,则 TreeSet 的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。
(02) TreeSet 是非线程安全的。
(03) TreeSet 实现 java.io.Serializable 的方式。当写入到输出流时,依次写入 “比较器、容量、全部元素”;当读出输入流时,再依次读取。
4.1 Iterator 顺序遍历
4.2 Iterator 顺序遍历
4.3 for-each 遍历 HashSet
TreeSet 遍历测试程序如下:


View Code
运行结果:
[
](javascript:void(0)😉
[
](javascript:void(0)😉
下面通过实例学习如何使用 TreeSet


[
](javascript:void(0)😉
[
](javascript:void(0)😉
View Code
运行结果:
[
](javascript:void(0)😉
[
](javascript:void(0)😉
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/2027.html