集合包系列六 —— TreeSet

本系列文章所描述的所有类或接口都是基于 JDK 1.7的源码,在其它 JDK 的实现方式中可能会有所不同。

一、实现方式

TreeSet 和 HashSet 的主要不同在于 TreeSet 对于排序的支持,TreeSet 基于 TreeMap 实现。

二、创建 TreeSet

此时所要做的就是创建一个 TreeMap 对象。

    public TreeSet() {
        this(new TreeMap<E,Object>());
    }

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

    public TreeSet(Collection<? extends E> c) {
        this();
        addAll(c);
    }

    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

    public TreeSet(SortedSet<E> s) {
        this(s.comparator());
        addAll(s);
    }

三、添加元素 add(E)

调用 TreeMap 的 put(Object, Object) 方法完成此操作,用要增加的元素作为 key,用之前已创建的一个 final 的 Object 对象作为 value。

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

四、删除元素 remove(E)

调用 TreeMap 的 remove(Object) 方法完成此操作。

    public boolean remove(Object o) {
        return m.remove(o)==PRESENT;
    }

五、遍历元素 iterator()

调用 TreeMap 的 navigableKeySet 的 iterator 方法完成此操作。

    public Iterator<E> iterator() {
        return m.navigableKeySet().iterator();
    }

综上所述,TreeSet 和 HashSet 一样,也是完全基于 Map 来完成的,并且同样也不支持 get(int) 来获取指定位置的元素,只是 TreeSet 基于的是 TreeMap,除了这些基本的 Set 实现外,TreeSet 还提供了一些排序方面的支持。例如传入 Comparator 实现、descendingSet 以及 descendingIterator 等。

六、注意要点

对于 TreeSet 而言,最要注意的有以下几点:

  • TreeSet 基于 TreeMap 实现,支持排序;
  • TreeSet 是非线程安全的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 753评论 0 1
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 894评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,292评论 0 16
  • 〖每日拔拔草〗三度思维空性 1.今天我妹妹来工厂看我,我察觉到我对她的态度有不以为然,就警醒:我今天对待她人的模式...
    lindacheng2017阅读 207评论 0 0