关闭

JAVA集合源码分析系列:TreeSet源码分析

366人阅读 评论(0) 收藏 举报
分类:

TreeSet

TreeSet的父类和实现的接口

TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet, Cloneable, java.io.Serializable接口。
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的。

构造函数

    public TreeSet() {
        this(new TreeMap<E,Object>());
    }
    TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
    }

属性

    private transient NavigableMap<E,Object> m;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

行为

add方法

    public boolean add(E e) {
        return m.put(e, PRESENT)==null;
    }

remove方法

    public boolean remove(Object o) {
        return m.remove(o)==PRESENT;
    }
0
0
查看评论

【集合详解】TreeSet源码解析

TreeSet概述所有实现的接口:Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, Set<E>, SortedSet<E>以下是类的对应关系。从左到...
  • u010176014
  • u010176014
  • 2016-08-02 17:35
  • 992

【java集合框架源码剖析系列】java源码剖析之TreeSet

本博客将从源码的角度带领大家学习TreeSet相关的知识。 一TreeSet类的定义: public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, java.io.Serializable可以看到T...
  • htq__
  • htq__
  • 2016-04-04 15:28
  • 1638

TreeSet实现原理及源码分析

类似于HashMap和HashSet之间的关系,HashSet底层依赖于HashMap实现,TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。但实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素。 下面是...
  • itmyhome
  • itmyhome
  • 2017-08-01 22:18
  • 1189

java集合框架03——ArrayList和源码分析

上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习。首先学习List。而ArrayList又是List中最为常用的,因此本章先学习ArrayList。先对ArrayList有个整体的认识,然后学习它的源码,深入剖析ArrayLis...
  • eson_15
  • eson_15
  • 2016-04-11 15:05
  • 3328

TreeSet源码分析

1、概述TreeSet 是 Set 接口的另一个实现类,它内部采用自平衡的排序二叉树来存储元素,这种结构保证 TreeSet 集合中没有重复的元素,并且对元素进行排序。TreeSet 集合存入一个元素时,都会将存入的元素与其他元素比较,这就要求 TreeSet 集合存入的元素必须是实现Compara...
  • wanghanlincsdn
  • wanghanlincsdn
  • 2017-03-02 19:01
  • 208

黑马程序员——集合的特殊功能之TreeSet集合如何保证元素的唯一及排序的

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- TreeSet集合储存的元素特点是唯一和自动排序,它是如何实现的呢? class TreeSet implements Set { private transient Navigable...
  • DoSamba
  • DoSamba
  • 2015-12-29 02:33
  • 1097

java集合(7):TreeSet源码分析(jdk1.8)

前言TreeSet是基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。这句话什么意思呢?就是说,跟HashSet底层是一个HashMap来维护类似,TreeSet的底层...
  • qq_32166627
  • qq_32166627
  • 2017-05-27 11:06
  • 589

深入源码分析HashSet

前面我们花了一定的篇幅学习了HashMap的一些底层原理,以及简单了解了HashSet和HashMap两种集合的渊源,现在我们从HashSet源码入手,来学习HashSet更细节的地方
  • canot
  • canot
  • 2016-04-25 10:09
  • 2010

Set的原理浅析 HashSet, TreeSet(NavigableMap)

Set一个不可重的集合对象。 HashSet,不保证插入的数据顺序,无序,因为使用的是HashMap散列表的形式,允许一个插入一个null。 源码解析: public class HashSet extends AbstractSet implements Set, Cloneable, java...
  • xiangnan129
  • xiangnan129
  • 2016-05-26 21:32
  • 834

java的Set集合:TreeSet集合

1.TreeSet类TreeSet使用红黑树的数据结构来存储集合元素 TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。如果希望TreeSet能正常运转,只能添加同一种类型对象。  ①自然...
  • peach90
  • peach90
  • 2015-05-14 20:32
  • 1364
    写给自己
    ○ 种一棵树最好的时间是十年前,其次是现在

    ○ 坚持输出,坚持书写,才可以持续成长

    ○ 所有美好事物的成长都是缓慢的

    ○ 既往不恋,未来不迎,当下不杂

    ○ 业精于勤,荒于嬉,行成于思,毁于随

    ○将军赶路 不追小兔

    ○不要拘泥于语言,同样也不要拘泥于行业,眼光放远一点

    ○ 如果某件事你做的不够好,不必介怀,因为以后的每一次每一天你都会做得越来越好

    ○ 此心不于事上磨,更于何处磨此心

    ○ 保持热情,保持求知欲

    ○ 千里之行,始于足下

    ○ 最怕你一生碌碌无为,还安慰自己平凡可贵。

    ○ 对于任何事,要保持自觉积极主动探索尝试。但是如果自己不积极认真地生活,不管得到什么样的回答都没有用。——解忧杂货店
    个人资料
    • 访问:696042次
    • 积分:7169
    • 等级:
    • 排名:第3761名
    • 原创:298篇
    • 转载:53篇
    • 译文:0篇
    • 评论:121条
    个人简介