以下是 TreeSet 的底层原理的详细解析,结合其数据结构、排序机制及性能优化:
一、底层数据结构:基于红黑树的有序集合
TreeSet 的底层实现完全依赖于 TreeMap,其核心数据结构为 红黑树(一种自平衡的二叉搜索树)。
关键设计:
• 元素存储:TreeSet 中的元素作为 TreeMap 的 键(Key),而值(Value)统一使用静态常量 PRESENT 占位。
• 红黑树特性:
• 每个节点包含颜色(红/黑)、父节点、左右子节点引用。
• 通过 颜色调整 和 旋转操作 维护树的平衡,确保插入、删除、查询等操作的时间复杂度为 O(log n)。
• 自平衡规则包括:根节点为黑色、红色节点不能连续、任意节点到叶子的路径包含相同数量的黑色节点等。
数据结构示意图:
TreeSet 实例
└── 内部 TreeMap
├── 红黑树根节点
│ ├── 左子节点 → 元素A(黑)
│ └── 右子节点 → 元素B(红)→ 元素C(黑)
└── 比较器(自然排序或自定义 Comparator)
二、排序机制:自然排序与自定义 Comparator
TreeSet 支持两种排序方式:
- 自然排序:
• 元素必须实现Comparable接口(如Integer、String),通过compareTo()方法定义排序规则。
• 未实现Comparable的自定义类会抛出ClassCastException。 - 自定义 Comparator:
• 通过构造方法TreeSet(Comparator<? super E> comparator)传入比较器,覆盖自然排序规则。
• 示例:按字符串长度排序:TreeSet<String> set = new

最低0.47元/天 解锁文章
1051

被折叠的 条评论
为什么被折叠?



