Comparable和Comparator的比较

Java中有两种方式来提供比较功能:
第一种是实现java.lang.Comparable接口
第二种是实现java.util.Comparator接口

Comparable
可以被认为是一个内部比较器,实现该接口使你的类具有“天生”的比较功能。此接口含有一个方法compareTo(),你需要自定义此方法实现比较的内容。此方法接收另一个Object为参数,如果当前对象小于参数则返回负值,如果相等返回0,如果当前对象大于参数则返回正值。
Comparator
可以被认为是一个外部比较器,假设有人给你一个并没有实现Comparable的类,或者给你的类实现了Comparable,但是你不喜欢它的实现方式,你需要另外一种不同的比较方法,此时你可以创建一个实现了Comparator接口的单独类。该方法有两个两个方法,compare()和equals()方法,每个类都继承于Object类,所以除非你有特殊的性能要求,一般都不需要重写equals()方法,使用Object类继承的equals()即可,你需要自定义compare()方法实现比较的内容,此方法包含两个T o1,T o2参数,T为泛型表示,分别表示比较的两个对象,如果当前对象小于参数则返回负值,如果相等返回0,如果当前对象大于参数则返回正值。

总结
1、如果实现类没有实现Comparable接口,又想对两个类进行比较(或者实现类实现了Comparable接口,但是对compareTo方法内的比较算法不满意),那么可以实现Comparator接口,自定义一个比较器,写比较算法
2、实现Comparable接口的方式比实现Comparator接口的耦合性要强一些,如果要修改比较算法,要修改Comparable接口的实现类,而实现Comparator的类是在外部进行比较的,不需要对实现类有任何修 改。从这个角度说,其实有些不太好,尤其在我们将实现类的.class文件打成一个.jar文件提供给开发者使用的时候。实际上实现Comparator 接口的方式后面会写到就是一种典型的策略模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值