Comparable和Comparator的区别
2019-02-21 06:39:25来源:博客园 阅读 ()
Comparable 和 Comparator 都是接口,均为比较器
Comparable相当于“内比较器”,而Comparator相当于“外比较器”
实现Comparable的类,该类就具有自身比较的功能;Comparator的实现,是一个外部比较工具器
注意Comparable 和 Comparator 同时实现时,则以Comparator为主
Comparable 接口
Comparable 被认为是内比较器,也是自然排序,实现该接口的类,会有自身比较的功能,则依赖compareTo方法的实现
CompareTo方法的返回值是int,有三种情况:
1、比较者大于被比较者,那么返回正整数
2、比较者等于被比较者,那么返回0
3、比较者小于被比较者,那么返回负整数
// Comparable 接口的定义 public interface Comparable<T> { public int compareTo(T o); }
例子:String 本身就以实现Comparable ,所以可以调用它的compareTo方法进行比较
class Person implements Comparable{ // 其他属性 @Override public int compareTo(Person p){ int temp = this.age - p.age; return temp == 0 ? this.name.compareTo(p.name) : temp; } }
Comparator接口
Comparator 被认为是外比较器,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口覆盖compare(T o1, T o2)方法,即可,然后通过这个比较器对类进行比较且排序
compare(T o1, T o2)方法,int返回值有三种情况:
1、o1大于o2,返回正整数
2、o1等于o2,返回0
3、o1小于o3,返回负整数
有两种场景可以使用实现Comparator接口的方式:
1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是如他所愿
例子:
public class PersonComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { int temp = p1.getName().compareTo(p2.getName); return temp == 0 ? p1.getAge() - p2.getAge() : temp; } }
原文链接:https://www.cnblogs.com/stamp/p/java_base.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- System.out.println()和System.out.print()区别 2020-06-10
- Java 集合排序策略接口 Comparator 2020-05-20
- ArrayList是如何实现的,ArrayList和LinedList的区别?Array 2020-05-19
- java基础面试题1 2020-05-19
- throws和throw的区别 2020-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash