Comparable和Comparator的区别?
请详细解释Java中Comparable和Comparator两个接口的区别,包括定义位置、排序逻辑、使用场景,以及实际开发中如何选择。给出代码示例说明。
回答
我是大山
Comparable:内部比较器,定义在实体类内部。
public class User implements Comparable<User> {
private int age;
@Override
public int compareTo(User o) {
return this.age - o.age; // 自然升序
}
}
Collections.sort(list); // 直接使用
Comparator:外部比较器,独立于实体类定义。
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User a, User b) {
return a.getAge() - b.getAge();
}
});
// Lambda简化
list.sort((a,b) -> a.getAge() - b.getAge());
区别对比: | 维度 | Comparable | Comparator | |------|-----------|-----------| | 包 | java.lang | java.util | | 方法 | compareTo() | compare() | | 修改实体 | 需要修改类 | 无需修改 | | 排序个数 | 一种自然排序 | 多种排序策略 | | Lambda支持 | 不适用 | 支持 |
选择:若类有天然排序逻辑(如学生按学号),实现Comparable;若需多种排序方式(按年龄/姓名/分数)或不方便修改类,用Comparator。