【Java集合框架】17——TreeSet 类

本文详细介绍了Java中的TreeSet类,包括其作为SortedSet接口的实现、内部的二叉搜索树结构、操作(添加、访问、删除)及性能特点。TreeSet按自然顺序或自定义比较器排序元素,支持高效的查找和删除操作,但并非线程安全。文章还提供了示例代码展示其基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、TreeSet 类的介绍

TreeSet是使用Tree进行存储的Java中SortedSet接口最重要的实现之一。无论是否提供显式comparator,元素的顺序都由一个集合使用它们的自然顺序来维护。如果要正确实现Set接口,这必须与equals保持一致。

它还可以通过在创建set时提供的Comparator进行排序,这取决于使用的是哪个构造函数。TreeSet通过继承AbstractSet类实现了NavigableSet接口。
在这里插入图片描述

从上图可以清楚地看出,导航集扩展了排序集接口。因为集合不保留插入顺序,所以可导航的集合接口提供了通过集合导航的实现。实现可导航集的类是TreeSet,它是一个自平衡树的实现。因此,该接口为我们提供了一种通过该树导航的方法。

Java TreeSet类实现了使用树进行存储的Set接口。它继承了AbstractSet类并实现了NavigableSet接口。TreeSet类的对象按升序存储

Java TreeSet类的要点如下:

  • TreeSet类只包含HashSet这样的唯一元素
  • TreeSet类访问和检索的时间非常快。
  • TreeSet类不允许空元素
  • TreeSet类是非同步的
  • TreeSet类保持升序。
  • TreeSet类只包含像HashSet一样的唯一元素
  • TreeSet只能允许具有可比性的泛型类型。例如,Comparable接口是由StringBuffer类实现的。

TreeSet类的内部工作:
TreeSet是使用二叉搜索树实现的,它像红黑树一样是自平衡的。因此,搜索、删除、添加等操作需要花费O(log(N))的时间。这背后的原因在于自平衡树。它的存在是为了确保所有提到的操作的树高度不超过O(log(N))。因此,它是一种高效的数据结构,可以保存已排序的大数据并对其进行操作。

TreeSet类的同步:
如上所述,TreeSet类不是同步的。这意味着如果多个线程并发访问一个树集,并且其中一个访问线程修改它,那么必须手动完成同步。通常通过封装集合的对象同步来实现。但是,如果没有找到这样的对象,则必须借助Collections.synchronizedSet()方法包装集合。建议在创建时使用该方法,以避免对集合的非同步访问。下面的代码片段显示了同样的情况。

TreeSet类声明:

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable    

TreeSet类的构造函数:

Constructor Description
TreeSet() 它用来构造一个空树集,按照树集的自然顺序升序排序。
TreeSet(Collection<? extends E> c) 它用于构建一个新的树集,其中包含集合c的元素。
TreeSet(Comparator<? super E> comparator) 它用于构造一个空树集,根据给定的比较器对其排序。
TreeSet(SortedSet s) 它用于构建包含给定SortedSet元素的treesset。

二、TreeSet 类的操作

2.1 添加操作

为了向TreeSet添加元素,可以使用add()方法。但是,插入顺序不保留在TreeSet中。在内部,对每个元素的值进行比较并按升序排序。我们需要注意的是,不允许重复元素,并且忽略所有重复元素。而且,TreeSet不接受Null值。

实例:

    public static void main(String[] args) {
   
        //创建集合
        TreeSet<String> ts=new TreeSet<String>();

        //添加元素
        ts.add(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值