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是为了使用对象。
本文介绍了Java中对象比较的两种方式:实现Comparable接口和Comparator接口。通过示例展示了如何按照价格对Car对象进行排序。Comparable接口适用于类自身的排序规则,而Comparator接口则提供了更灵活的排序方式,可在需要改变排序条件时避免修改原有代码。
531

被折叠的 条评论
为什么被折叠?



