TreeSet类的设计基于实现red-black树的TreeMap类。基本上,一个TreeSet对象是所有元素(节点)都有相同值(树中节点的value数据域)的TreeMap对象,TreeSet会忽略掉TreeMap集合中元素的value,只使用元素的key。下面是TreeSet类的字段:
private transient SortedMap m; // TreeSet基于SortedMap的实现
private transient Set keySet; // SortedMap实现的key视图,因为TreeSet只使用到map中元素的key域
// 向TreeSet集合中加入一个元素,实质上就是向它所基于的map中put一个元素,且这个元素的值(value)就是下面这哑元对象
private static final Object PRESENT = new Object();
我们看看它的默认构造函数:
public TreeSet() {//默认构造函数
this(new TreeMap());
}
从上面可以看出,TreeSet基于TreeMap来实现的,当然你可以使用一个实现了SortedMap接口的类
private TreeSet(SortedMap m) {
this.m = m;//基于SortedMap实现
keySet = m.keySet();//只使用map的key
}
再看看put方法:
public boolean add(Object o) {
/*
* PRESENT是前面提到过的哑元对象,用来代替map中元素的value,由此可看出
* 所有存入TreeSet中的元素最后实质上都由map存储起来,并且忽略所以元素的
* value(使用同一个Object对象顶替),所以对TreeSet的操作实质上就是对
* map的操作。
*/
return m.put(o, PRESENT)==null;
}
所以要搞清楚TreeSet还得要看懂TreeMap
才行~!
分享到:
相关推荐
先来看下 TreeSet 完整的继承结构图 可以看到 TreeSet 与 HastSet 不同,不仅继承⾃ AbstarctSet 类,还实现了 SortSet 与它的⼦类 NavigableSet 接⼝,所以在查看 TreeSet 的源码之前,必须先来看⼀下 SortedSet ...
NULL 博文链接:https://elvin-chu.iteye.com/blog/1942033
·企业级笔试面试题目深入源码级讲解,拒绝死记硬背 4.代码量更大、案例更丰富、更贴近实战: ·Java语言基础阶段:12720行代码,Java语言高级阶段:11684行代码 ·课堂实战项目3套,课后实战项目2套 ·近百道企业...
7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖括号> 左尖括号反斜杠\ 即空格,制表符,回车符等 10 匹配非负整数(正...
java源码整理包:list,map,ArrayList,HashMap,HashSet,Hashtable,TreeMap,TreeSet,Vector等源码包分享
主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
这篇集合总结一共包括十二节,介绍了一些接口和实现类的底层源码以及基本的增加、删除元素等的操作(包括List、Map、Set接口、ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类)。...
这是我的博客文章对应的源码.可以直接 使用,包括所有的jar包.
说明:如无特别说明,所有代码都基于JDK8 JavaSE(Java基础) Java Core 关键字 synchronized关键字 Java String Java Arrays Java Collections Java 泛型 Java NIO Buffer Channel Selector Java 8 Features 源码解读...
bitset源码Java源码分析 基础集合列表 ArrayList (done) Vector (done) LinkedList (done) Stack (done) ReferenceQueue (done) ArrayDeque (done) Set HashSet (done) TreeSet (done) LinkedHashSet (done) BitSet ...
使用Java集合CS 5V81.001的“跳过列表”项目的源代码:数据结构和算法的实现项目1 Akshay Thakare(ast140230) 描述:实现跳过列表数据结构,将其性能与Java的TreeMap进行比较。 跳过列表是一种数据结构,它...
SUN公司编写源代码的时候已经为我们写好了排序代码,因此在我们输入数据元素后会实现自动排序(这里的数据都是对象,也就是引用类型,不能是基本数据类型),源码中可见底层是调用了compareTo()方法进行了排序(详情...
文章目录Collection源码剖析(一)简介(二)源码分析 Collection源码剖析 ... |___TreeSet JDK不提供此接口的任何直接实现:它提供了更具体的子接口(如Set和List)的实现。 (2)Collection的继承体系 关于Ite
源码下载 Java se 基础练习 每个目录为一个大的模块(如 集合,数据结构,反射,设计模式等),目录的详信息将在二级目录下详细列出 JVM.model(内存模型) StackOverflowError:Fibonacci.java GC(垃圾回收练习) ...
Collections 源码 java Java Java的ArrayList、LinkedList、HashMap、TreeMap、LinkedHashMap、HashSet、TreeSet相关源码分析,及相关问题和应用总结。
集合源码分析 java基础复习 [TOC] 一、集合 1.Iterator 2.Collection 2.1 List--->有序、有索引、元素可重复 1.ArrayList: 底层是数组结构、查询快、增删慢、不同步 添加第一个元素的时候,创建默认个数是10个,...
安卓毕业设计app项目源码6 2018android 1.请写出ArrayList,LinkedList,HashMap之间的区别和联系 本题侧重与对android集合框架的认识程度 这里进行解析 java集合框架Collection collection是集合框架的根,定义了集合...
源码 这是Java学习中的一些代码以及重要的知识点 1 2018-10-16 熟悉idea中github使用 2 2018-10-17 添加.ignore插件,忽略不必要的文件 3 2018-10-17 添加覆盖隐藏、抽象类等学习注释 4 2018-10-22 添加类初始化 5 ...
HashSet&TreeSet 索引技术 中文分词算法 Lucene 性能调优 JVM性能调优 JVM类加载机制详解 JVM内存模型 类字节码文件深度剖析 垃圾收集机制详解 十种垃圾收集器详解 JVM调优工具详解 GC日志详细分析 JVM调优实战 ...
请不要对您自由下载的所有源代码感到不好,因为很难对所有源代码进行编码。 如果您想让我注意一些问题,可以向我发送消息。 ========== CusenzaEx 有关操作系统及其系统调用的简要练习集。 文件夹跟踪主题。 ====...