Comparable 接口:
-
位置:
java.lang.Comparable接口位于java.lang包中。 -
实现方式: 对象自身实现
Comparable接口,重写compareTo方法。 -
用途: 提供对象的自然排序(默认排序方式)。
-
排序规则: 对于类
A实现了Comparable接口,若对象a1和a2是A的实例,则a1.compareTo(a2)返回负数表示a1小于a2,返回正数表示a1大于a2,返回 0 表示相等。 -
示例:
public class MyClass implements Comparable<MyClass> { private int value; public MyClass(int value) { this.value = value; } @Override public int compareTo(MyClass other) { return Integer.compare(this.value, other.value); } }
Comparator 接口:
-
位置:
java.util.Comparator接口位于java.util包中。 -
实现方式: 创建一个实现
Comparator接口的独立类或使用匿名内部类。 -
用途: 提供外部定制排序,可以对不同对象使用不同的排序规则。
-
排序规则: 对于类
A,若创建了一个Comparator<A>对象comp,则comp.compare(a1, a2)返回负数表示a1小于a2,返回正数表示a1大于a2,返回 0 表示相等。 -
示例:
public class MyComparator implements Comparator<MyClass> { @Override public int compare(MyClass obj1, MyClass obj2) { // 自定义比较规则 return Integer.compare(obj1.getValue(), obj2.getValue()); } }
如何选择使用:
- 使用
Comparable当你想为对象提供默认的自然排序。 - 使用
Comparator当你需要为同一对象提供多个不同的排序方式,或者当你无法修改类本身但仍需要进行排序时。