1. Comparable
Comparable是java.lang下面的接口
java很多基础类都实现了Comparable接口
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
public final class Long extends Number implements Comparable<Long> {
Comparable接口比较简单,里面只有一个compareTo方法。
public interface Comparable<T> {
public int compareTo(T o);
}
Comparable接口在实现的时候,必须指定比较的类型。
当前值如果比o小,返回负数,
如果比o大,返回正数,
如果相等,返回0
示例:
public class Person implements Comparable<Person>{
public int age;
@Override
public int compareTo(Person p) {
return this.age-p.age;
}
}
测试:
public static void main(String[] args) {
// 第一种方式比较
Person p1 = new Person();
Person p2 = new Person();
p1.compareTo(p2);
}
如果一个类实现了Comparable接口,就能够使用Collections.sort方法
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
2. Comparator
Comparator是java.util包下面的接口
如果一个对象实现了Comparator接口,自己就相当于了一个比较器。
示例:
public class PersonComparator implements Comparator<Person>{
@Override
public int compare(Person p1, Person p2) {
return p1.age-p2.age;
}
}
测试:
public static void main(String[] args) {
// 第二种方式比较
Person p1 = new Person();
Person p2 = new Person();
PersonComparator comparator = new PersonComparator();
comparator.compare(p1, p2);
}
3. 总结
实现Comparable接口相当于内部实现。需要类来实现这个接口,对代码不友好。
实现Comparator接口相当于外部实现。在外部新建一个类,实现这个接口,没有代码侵入。