Comparable和Comparator接口有何区别?
Comparable
和 Comparator
是 Java 中用于对象排序的两个接口,它们之间有几个关键的区别:
Comparable
接口是一个用于定义自然排序的接口。实现这个接口的类需要重写 compareTo(T o)
方法。Comparator
接口是一个用于定义自定义排序的接口。实现这个接口的类需要重写 compare(T o1, T o2)
方法。Comparable:
Comparable
接口,类的实例可以直接进行比较。例如:
public class Person implements Comparable<Person> {
private String name;
private int age;
@Override
public int compareTo(Person other) {
return this.age - other.age; // 按年龄排序
}
}
Comparator:
Comparator
接口,可以创建多个比较器。例如:
public class PersonComparatorByName implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName()); // 按名字排序
}
}
Comparable:
Comparable
。例如,String
和 Integer
类都实现了 Comparable
接口。Comparator:
Comparator
。例如,可以根据名字、年龄或其他属性进行排序。Comparable:
Comparable
接口,类的排序逻辑就固定了。Comparator:
Comparable
时,类自己定义排序逻辑;使用 Comparator
时,可以在外部定义多个排序逻辑。选择哪个接口取决于具体的需求和设计考虑。