Comparator 与 Comparable 的区别

(This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.)

Comparable:从上述关于 Comparable 的接口描述可以看出,一个类在一开始就实现了此接口,就可以通过实现 compareTo() 方法来定义内在的比较方法,是创建类时就定义好的。比如 java.util.Date 类中的比较方法:

1     public int compareTo(Date anotherDate) {
2         long thisTime = getMillisOf(this);
3         long anotherTime = getMillisOf(anotherDate);
4         return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));
5     }
Date类中的comparaTo方法

 

Comparator:一些类在最初时没有实现 Comparable 接口,该类内部就无比较方法,在多数情况下需要比较该类时,就可以创建该类的比较器类,比如 Person 类,可以创建 PersonComparator 类(继承 Comparator 接口),用新创建的 PersonComparator 来实现比较方法,该类内部通过实现  compare(Person p1, Person p2)方法来定义比较的方法。

 

  感觉经过一段时间之后,很容易忘掉这两个接口的区别。今天突然有了一些灵感,就记住了,于是就记录下来:

  Comparable:类一开始就实现了该接口,从英语也可以看出,单词后缀为 able(此后缀意指“可.......的”),说明该类实现此接口是可以比较的。于是通过实现 compareTo(T o) 方法,这个方法是指这个类可以跟 o 作比较。

1 public interface Comparable<T> {
2     public int compareTo(T o);
3 }
Comparable 接口

 

  Comparator:虽然上面的接口很好用,类“自带”比较方法,作者很有预见性嘛。但是如果一开始你自己创建的类没有实现上面上面的接口怎么办,总不可能事事都能有所预见吧?于是乎这个 Comparator 接口就发挥了大用处了,怎么说呢? 当然是再来看后缀啦,单词后缀 or(表人或物),就是说我另外创建一个“比较器”不就可以了嘛!于是就创建一个比较器类,如上述的 PersonComparator。于是乎就有了下面这个方法,怎么比较呢?用外在类的方法来比较,比较的是两个对象 var1 和 var2 。

int compare(T var1, T var2);

 

转载于:https://www.cnblogs.com/Eric-F/p/10120022.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值