Comparable 形容词:可比较的
package java.lang;
import java.util.*;
public interface Comparable<T> {
public int compareTo(T o);
}
Comparator 名词:比较器
package java.util;
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
compare方法,大于返回正数,等于返回0,小于返回负数
Comparable
- 对象类实现Coparable接口,可以对该对象数组直接排序
- 对象类实现了Comparable的
compareTo
方法后,对象的列表List可以通过Collections.sort()
或者Arrays.sort()
对数组进行排序
public class Student implements Comparable<Student>{
private int age;
@Override
public int compareTo (Student s) {
//this对象和传入的s对象进行比较,this大于s返回1,等于返回0,小于返回-1;
if(this.age == s.age)return 0;
else return this.age - s.age;
}
}
Comparator
- 类不能改变,不能重写。
- 在外部使用Comparator接口,外部接口扩展,类本身可能没有比较方法,用来比较输入的两个变量的大小,也可传入
Collections.sort(List<T list>, Comparator<? super T> c)
- 只需实现最重要的compare,其他的可以不用实现,jdk8后接口增加了default方法,可以有方法体,实现接口的时候可以不用重写,类比抽象类中的方法。
//内部类实现Comparator
Collections.sort(list,new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2)
{
return s1.getAge()-s2.getAge();
}
});
Comparable & Comparator 对比
- Comparable 在基本数据类型中都有实现,可以直接使用compareTo方法。Comparator在对特殊类进行比较的时候可以进行外部实现。
- Comparable 对参数有要求,不可以对比null,会抛出
NullPointerException
,而Comparator可以对空指针进行比较。