• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
mankun
博客园    首页    新随笔    联系   管理    订阅  订阅

【JAVA】TreeSet讲解

什么是TreeSet?TreeSet是JAVA中集合的一种,它通过红黑树(Red-Black Tree)数据结构实现了有序的,唯一元素存储结构。

一、TreeSet的定义

TreeSet是Java集合框架中的一种有序集合,它实现了Set接口,因此具有不允许重复元素的特性。TreeSet 使用红黑树数据结构来存储元素,这使得元素在集合中保持有序。
这里需要理解两个主要特性:

  • 有序性(Order):TreeSet中的元素按照自然排序(元素的自然顺序)或者指定的排序方式(通过比较器)排列。这意味着您可以遍历TreeSet 得到的元素是按照一定的顺序排列的。
  • 唯一性(Uniqueness):TreeSet保证元素的唯一性,不允许重复元素。
    因此,TreeSet是一个适用于需要有序存储唯一元素的场景的理想选择。

二、TreeSet的实现

要深入理解TreeSet,我们需要了解它的内部实现机制,即红黑树。红黑树是一种自平衡二叉搜索树(Self-Balancing Binary Search Tree),它具有以下特性:

  • 每个节点要么是红色,要么是黑色。
  • 根节点是黑色。
  • 每个叶子节点(NIL节点,空节点)是黑色的。
  • 如果一个节点是红色的,则它的两个子节点都是黑色的。

从任意节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。
这些规则确保了树的平衡,从而保证了树的高度不会过高,使得查找、插入和删除操作的性能稳定。
在TreeSet中,元素被存储在红黑树的节点中,根据元素的大小关系构建树结构。这意味着,插入、删除和查找操作的时间复杂度为O(log n),其中n是集合中的元素个数。由于红黑树的平衡性质,这些操作的性能是可预测的。

三、TreeSet的基本使用

前置导入

import java.util.TreeSet;

1 TreeSet的创建和初始化

1.1 默认构造方法

TreeSet的默认构造方法,元素默认按照升序排列。

public static void main(String[] args) {
    TreeSet<Integer> t = new TreeSet<>();
    t.add(3);
    t.add(2);
    t.add(1);
    System.out.println(t);
    // 运行结果:[1, 2, 3]
}

1.2 制定排序方式的构造方法

可以使用带有Comparator参数的构造函数来指定元素的排序方式。
例如:构造一个降序排列的TreeSet:

public static void main(String[] args) {
    TreeSet<Integer> t = new TreeSet<>(Comparator.reverseOrder());
    t.add(2);
    t.add(1);
    t.add(3);
    System.out.println(t);
    // 运行结果:[3, 2, 1]
}

1.3 从现有集合中创建

从一个List或者Set中创建TreeSet:

public static void main(String[] args) {
    Set<Integer> s = new HashSet<>(Arrays.asList(2, 1, 3));
    TreeSet<Integer> t = new TreeSet<>(s);
    System.out.println(t);
    // 运行结果:[1, 2, 3]
}
posted @ 2025-09-20 13:19  小小船帆  阅读(13)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3