Java中如果涉及到对象之间的比较,则可以实现Comparable接口重写compareTo(T o)方法,或者实现Comparator接口重写compare(T o1,T o2)方法自定义规则的比较对象之间属性的操作。
Comparable接口:
提供一个实现Comparable接口的类Car,我们按照Car的价格从小到大排序。
class Car implements Comparable<Object>{
private int price;
private int size;
@Override
public int compareTo(Object o) {
//为了避免类型转换异常,使用instanceof判断
if(o instanceof Car){
//按照价格高低比较,使用Integer包装类提供的compare(方法)
return Integer.compare(this.price, ((Car) o).price);
}
return 0;
}
}
测试:
Comparator接口:
方式一:写一个类实现Comparator接口
class CarPrice implements Comparator<Object>{
@Override
public int compare(Object o1, Object o2) {
//确保不会产生类型转换异常
if(o1 instanceof Car && o2 instanceof Car){
return Integer.compare(((Car) o1).getPrice(), ((Car) o2).getPrice());
}
return 0;
}
}
测试:
方式二:内部类的方式
对比:
如果通过实现Comparable接口定制排序,缺乏灵活性。Comparator接口比较临时,需要更改排序条件时可以不更改之前的排序,直接定制新的排序规则。
实现Comparable接口就是为了使用CompareTo方法,而实现Comparator是为了使用对象。