`

TreeSet源码阅读

    博客分类:
  • Java
 
阅读更多

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 才行~!

分享到:
评论

相关推荐

    排序之HashSet和TreeSet的区别

    在Java编程语言中,集合框架是处理数据的重要组成部分,其中`...同时,源码阅读也是提升技能的好方法,通过查看`HashSet`和`TreeSet`的源码,可以更深入地了解它们的工作原理,这有助于优化代码并解决可能出现的问题。

    java源代码,java源代码

    Java源代码是编程世界的基石,它是Java程序员用Java语言编写的程序文本,包含了...对于压缩包中的"java源码",可能是某个具体项目或库的源代码,通过阅读和学习,我们可以深入了解其设计思路和实现方式,提升编程技能。

    java大全书上源代码2

    通过阅读和实践这些源代码,你可以深入学习Java的各种特性,包括但不限于: 1. 类和对象:Java是面向对象的语言,源代码会展示如何定义类,创建对象,以及如何利用继承、封装和多态等面向对象原则来设计软件。 2. ...

    数据结构与算法分析(java版内含源代码)

    这本书不仅提供了理论知识,还通过提供源代码实例,帮助读者更好地理解和应用这些概念。 首先,数据结构是存储和组织数据的方式,它是算法设计的基础。在书中,你将学习到基本的数据结构,如数组、链表、栈、队列、...

    java基础语法程序源代码

    本压缩包包含了一系列关于Java基础语法的源代码示例,旨在帮助初学者深入理解和掌握Java编程的核心概念。以下将针对每个章节的可能内容进行详细阐述: 1. **Chapter 1:基础语法** - 变量声明与初始化:包括基本...

    Java 数据结构与算法+源代码 高清版

    这份“Java数据结构与算法+源代码高清版”资源旨在帮助开发者深入理解并掌握这些关键概念。 首先,让我们来探讨数据结构。数据结构是组织和存储数据的方式,它为算法提供了基础。常见的数据结构包括数组、链表、栈...

    java中treemap和treeset实现红黑树

    从TreeSet的源代码可以看到,TreeSet使用了一个NavigableMap来保存Set集合的元素,其中NavigableMap是TreeMap的一个子接口。TreeSet的构造器可以指定一个NavigableMap对象来创建Set集合,也可以使用默认的TreeMap来...

    扑克源代码

    扑克源代码 本资源为扑克24点游戏的JAVA源代码,游戏规则是将四张扑克牌随意组合使用四种算数方法(+、-、×、÷)来计算出结果为24的方案。源码使用了泛型、枚举,JDK版本为1.8。 知识点1:游戏规则简介 扑克24点...

    尚硅谷-实验:TreeSet的自然排序与定制排序.pdf

    ·企业级笔试面试题目深入源码级讲解,拒绝死记硬背 4.代码量更大、案例更丰富、更贴近实战: ·Java语言基础阶段:12720行代码,Java语言高级阶段:11684行代码 ·课堂实战项目3套,课后实战项目2套 ·近百道企业...

    数据结构(Java版)源代码

    通过阅读和分析这些源代码,你可以深入理解每种数据结构的工作原理,以及如何在Java中实现它们。同时,这也能帮助你掌握如何根据具体问题选择合适的数据结构,提升编程能力。在实际开发中,合理利用数据结构可以显著...

    java数据结构源代码

    在编程领域,数据结构是构建高效算法的基础,它关乎如何有效地存储和组织数据。Java作为广泛应用的编程语言,提供了...通过阅读和理解源代码,你能够更好地理解Java集合框架的工作原理,并能灵活运用到自己的项目中去。

    JAVA课程设计源代码

    Java课程设计源代码是学习和理解Java编程语言深入精髓的重要资源。这些源代码实例涵盖了Java的基础到高级特性,为初学者提供了丰富的实践素材,同时也为有一定经验的开发者提供了参考和灵感。下面将详细阐述Java课程...

    Java核心技术源代码.rar

    "Java核心技术源代码.rar"这个压缩包很可能是包含了一些关于Java基础到高级技术的示例代码或者一个完整的项目源码,用于帮助学习者深入理解Java编程。在这个压缩包中,"CoreJava源代码"可能包含了Java核心类库的实现...

    java类的源代码文件

    Java 类的源代码文件是程序员编写程序的基本单元,它们以.java为扩展名,包含了Java语言的语法结构,用于定义对象、方法和变量等。在这个压缩包中,我们可能找到了作者自己编写的关于Java集合类的实例源代码。Java...

    数据结构(Java版) 源代码

    在这个"数据结构(Java版) 源代码"的压缩包中,我们可以找到用Java编写的典型数据结构的实现,这对我们学习和理解数据结构具有极大的价值。 首先,我们要明白数据结构的基本类型,包括线性结构(如数组、链表)、树...

    读取excel和连接数据库的jar包以及工程源代码

    标题 "读取excel和连接数据库的jar包以及工程源代码" 涉及到的核心知识点主要是Java编程中处理Excel文件和数据库操作的部分。在描述中提到的“源码”表明这是一个实际可运行的项目,包含了读取Excel数据并利用JDBC...

    java编程新手自学手册源代码

    Java编程新手自学手册源代码是为初学者设计的一份宝贵资源,它涵盖了Java语言的基础到进阶知识,帮助读者通过实践来理解编程概念。这份源代码包含了一系列的示例程序和练习,旨在辅助读者深入学习Java编程语言。 一...

    java基础教程源代码

    Java基础教程源代码是学习Java编程语言的重要参考资料,它涵盖了Java的基本操作,旨在帮助初学者理解和掌握编程概念。在这个教程中,你可以通过实际的代码示例来了解和实践各种Java编程技术。以下是一些关键的知识点...

    java源代码.rar

    源代码的重要性在于它是软件开发的基础,通过阅读和理解源代码,我们可以了解到程序的工作原理、设计模式以及算法实现。对于学习Java的人来说,分析和研究源代码是提升技能的有效途径。 在Java编程中,主要涉及以下...

    Core Java 2源代码

    《Core Java 2》是Java开发领域的一本经典著作,分为卷一《基础知识》和卷二《高级特性》,深入浅出地介绍了Java编程的核心概念和技术。...同时,书中丰富的示例代码和源代码分析有助于加深理解,提升实战能力。

Global site tag (gtag.js) - Google Analytics