怎样使用 TreeSet 维护有序集合?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
TreeSet 根据自然顺序或构造时传入的 Comparator 排列元素,用比较结果为零判重,并提供 first、last、floor、ceiling、subSet 等顺序导航。它是类,不是“排序函数”。适合需要持续有序和范围查询的成员集合;只做普通去重时,不必为排序额外付出维护成本。
讲清原理
自然顺序要求元素能按 Comparable 相互比较;外部比较器则能定义业务顺序。排序关键字段放入后若变化,树的已有位置不会自动调整,查找可能失败。最好保持比较依据稳定,需要变更时先移除再重新加入。
范围方法通常返回连接原集合的视图,修改会相互反映,并受边界限制。比较器如果把不同对象比较成零,后一项就不会新增;规则应尽量与 equals 一致,以符合一般 Set 契约。
例子与易错点
Java 21 的 main 片段:
var times = new java.util.TreeSet<>(java.util.List.of(9, 14, 18, 14));
System.out.println(times);
System.out.println(times.ceiling(15));
System.out.println(times.subSet(9, true, 18, false));
输出 [9, 14, 18]、18、[9, 14]。自然顺序拒绝 null;自定义比较器若明确支持 null,则需按该规则讨论,不能把某个默认限制说成所有用法都绝对禁止。
相关题:第 6 题、第 11 题、第 27 题、第 31 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。