Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

Comparable 和 Comparator 分别解决什么问题?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

Comparable 由类型自身实现,通过 compareTo 定义自然顺序;Comparator 把比较规则独立出来,通过 compare 定义某种外部顺序。一个类型可以提供自然顺序,同时允许调用者按其他字段排序。返回结果看负数、零或正数,不要求只能返回 -1、0、1。

讲清原理

例如年龄值可按数值大小比较,这是自然顺序;人员列表还可能按姓名、入职日期或年龄排序,这些规则适合独立的 Comparator。

比较必须满足相应契约,尤其注意传递性和符号的一致性。用两数相减比较 int 可能溢出,应使用 Integer.compare 等。还要说明 null 的处理策略,不能假定所有比较器都接受 null。

例子与易错点

record Age(int value) implements Comparable<Age> {
    public int compareTo(Age other) {
        return Integer.compare(value, other.value);
    }
}
System.out.println(new Age(18).compareTo(new Age(20)) < 0); // true

这里由 Age 自己定义自然顺序。若业务需要反向或额外规则,可在外部提供比较器。排序集合可能用比较结果为 0 判断等价,因此还要关注它与 equals 是否一致,而不是只记住两个方法名。

相关题:第 22 题、第 23 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。