Comparable 和 Comparator 是 Java 中用于对象排序的两个接口,区别如下:
1. Comparable:自然排序(对象自己定义规则)
实现该接口的类,自己决定怎么排序。
public class Student implements Comparable<Student> {
private int age;
public Student(int age) {
this.age = age;
}
// 按年龄升序排序
@Override
public int compareTo(Student other) {
return this.age - other.age; // 升序
}
@Override
public String toString() {
return "Student{" + "age=" + age + '}';
}
}使用:
List<Student> students = Arrays.asList(new Student(20), new Student(18));
Collections.sort(students); // 自动按年龄排序
System.out.println(students); // [Student{age=18}, Student{age=20}]适合:一个类有默认排序规则(如年龄、ID)。
2. Comparator:外部排序(别人定义规则)
不修改类,外部定义排序方式,更灵活。
// 按年龄降序排序 Comparator<Student> byAgeDesc = (s1, s2) -> s2.age - s1.age; // 或按字符串长度排序(假设学生有姓名) Comparator<Student> byNameLength = (s1, s2) -> s1.getName().length() - s2.getName().length();
使用:
students.sort(byAgeDesc);
System.out.println(students); // [Student{age=20}, Student{age=18}]适合:多种排序规则,或不能修改原类。
总结对比
接口 | 所在位置 | 特点 | 使用场景 |
| 类内部实现 | 定义自然顺序(默认排序) | 一个类一个默认排序规则 |
| 外部定义(类外) | 定义临时/多种排序规则 | 灵活排序,不修改原类 |
记忆:
Comparable→ “我(对象)能被比较”Comparator→ “我(工具)用来比较别人”

0条评论
点击登录参与评论