自然排序:java.lang.Comparable
定制排序:java.util.Comparator
Comparable接口 #
重写compareTo(obj)的规则:
- 如果当前对象this大于形参对象obj,则返回正整数,
- 如果当前对象this小于形参对象obj,则返回负整数,
- 如果当前对象this等于形参对象obj,则返回零。
使用方法 #
//必须在需要排序的类中,实现Comparable接口,并且重写方法compareTo
public class Goods implements Comparable<Goods>{
private double goodsPrice;
@Override
public int compareTo(Goods o) {
return Double.compare(this.goodsPrice,o.goodsPrice);
}
}
Comparator接口 #
当元素的类型没实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序
重写compare(Object o1,Object o2)规则:
- 比较o1和o2的大小: 如果方法返回正整数,则表示o1大于o2;
- 如果返回0,表示相等;
- 返回负整数,表示o1小于o2。
使用方法 #
//在新的类里面,进行Comparator接口的实现并且重写compare方法
public class GoodsesIdUp implements Comparator<Goods> {
@Override
public int compare(Goods o1, Goods o2) {
return Double.compare(o1.getGoodsPrice(),o2.getGoodsPrice());
}
}
两种排序方式对比 #
- Comparable是比较的意思,而Comparator是比较器的意思;
- Comparable是通过重写
compareTo方法实现排序的,而Comparator是通过重写compare方法实现排序的; - Comparable必须由自定义类内部实现排序方法,而Comparator是外部定义并实现排序的。