TreeSet 的底层原理

以下是 TreeSet 的底层原理的详细解析,结合其数据结构、排序机制及性能优化:


一、底层数据结构:基于红黑树的有序集合

TreeSet 的底层实现完全依赖于 TreeMap,其核心数据结构为 红黑树(一种自平衡的二叉搜索树)。
关键设计
元素存储:TreeSet 中的元素作为 TreeMap 的 键(Key),而值(Value)统一使用静态常量 PRESENT 占位。
红黑树特性
• 每个节点包含颜色(红/黑)、父节点、左右子节点引用。
• 通过 颜色调整旋转操作 维护树的平衡,确保插入、删除、查询等操作的时间复杂度为 O(log n)
• 自平衡规则包括:根节点为黑色、红色节点不能连续、任意节点到叶子的路径包含相同数量的黑色节点等。

数据结构示意图

TreeSet 实例
└── 内部 TreeMap
    ├── 红黑树根节点
    │   ├── 左子节点 → 元素A(黑)
    │   └── 右子节点 → 元素B(红)→ 元素C(黑)
    └── 比较器(自然排序或自定义 Comparator)

二、排序机制:自然排序与自定义 Comparator

TreeSet 支持两种排序方式:

  1. 自然排序
    • 元素必须实现 Comparable 接口(如 IntegerString),通过 compareTo() 方法定义排序规则。
    • 未实现 Comparable 的自定义类会抛出 ClassCastException
  2. 自定义 Comparator
    • 通过构造方法 TreeSet(Comparator<? super E> comparator) 传入比较器,覆盖自然排序规则。
    • 示例:按字符串长度排序:
    TreeSet<String> set = new 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值