Comparable接口:
定义比较的规则,实现该接口的类,其对象可以进行比较(如排序,比较大小);
位于java.lang包,无需引入,可以直接使用;核心方法:int Compare(T o),返回值决定结果;
事实上,Java中排序算法的底层实现也依赖Comparable接口。
CompareTo方法规则,返回值含义:
- 正数,当前对象(this)大于目标对象(o);
- 0, 当前对象(this)等于目标对象(o);
- 负数,当前对象小于(this)目标对象(o);
compareTo(Student o) {
return this.num - o.num;
}
使用步骤
-
类实现Comparable接口,指定泛型类型(通常为当前类);
-
重写compareTo方法,定义具体比较规则
-
直接使用比较逻辑(如排序、比较)
- 配合
Arrays.sort():实现对象数组的自动排序 - 直接调用
对象.compareTo(另一个对象)比较大小
- 配合
实例演示(Student 类按学号排序)
- 定义实现类
public class Student implements Comparable<Student> {
private int id; // 学号
private String name;
// 构造方法、getter/setter省略
// 重写compareTo:按学号升序排序
@Override
public int compareTo(Student o) {
return this.id - o.id; // 若返回o.id - this.id,则为降序
}
}
2. 使用排序
Student[] students = {
new Student(3, "张三"),
new Student(1, "李四"),
new Student(2, "王五")
};
Arrays.sort(students); // 自动按学号升序排序
// 排序后结果:id=1(李四)、id=2(王五)、id=3(张三)
特点和注意事项
- 自然排序唯一性:一个类只能实现一次
Comparable,即只有一种自然排序规则 - 与
Comparator的区别:Comparable是类自身实现的排序(内部比较器),Comparator是外部定义的排序规则(灵活但需额外定义) - 空值处理:若比较中可能出现
null,需在compareTo中添加非空判断(避免NullPointerException)