天天看点

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

Java中的对象一般来说只能比较‘==’或‘!=’,不能使用>和<。但在开发中经常有需要对多个对象进行排序,比如说淘宝京东的商品排序。而排序则需要比较其中的两个对象的大小。这时候就引入了Comparable和Comparator接口

Java比较器

  • 一、自然排序Comparable,一劳永逸型
  • 二、定制排序Comparator,一次性临时型

一、自然排序Comparable,一劳永逸型

1、String、包装类都实现了Comparable接口,并在里面重写了接口里的唯一一个方法:compareTo()方法。给出了比较两个对象大小的方式。

下图可以看到String类是已经实现Comparable接口:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

下图可以看到,直接调用sort方法即可对String类型的数据实现排序:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

而如果对未实现Comparable接口的对象进行排序时,则会报错,提醒我们没有使用Comparable接口:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

2、重写compareT(obj)规则:如果当前对象this大于形参对象obj,返回正整数;反之返回负整数;相等时返回0;

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

执行结果:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

二、定制排序Comparator,一次性临时型

1、元素类型没实现Comparable接口且不方便修改代码(jdk中的类),或者实现了Comparable接口但排序规则不适合当前操作(String和包装类,只能按照从小到大的规则,而我们需要从大到小的排序规则),就可以考虑使用Comparator对象来排序

2、从写compare(Object o1,Object o2)方法,比较o1和o2的大小,和compareTo方法一样,比较传入俩参数的大小,返回整数表示o1大于o2,反之o1小于o2,返回0则表示相等。

下图为定制从大到小排序的比较器:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

下图为对自定义类对象实现排序功能的案例:

JavaHigh05-Java比较器Comparable和Comparator接口一、自然排序Comparable,一劳永逸型二、定制排序Comparator,一次性临时型

继续阅读