-
Comparable是排序接口,常用于自然排序;若一个类实现了Comparable接口,就意味着“该类支持排序”。
-
Comparator是比较器,常用于需要对排列的顺序进行精确控制的情况;我们若需要控制某个类的多个对象的次序,可以建立一个“该类的比较器”来进行排序。
通过代码来细看它们的不同实现与作用
内部比较器 comparable 主要代码
public class Dayimplements Comparable {
private int year;
public Day(int year) {
this.year = year;
}
/**
* @desc 重写compareTo函数。通过year来比较,如果return 的大于0 则当前类排在比较类的后面
* 如果return 的小于0 则当前类排在比较类的前面
*/
public int compareTo(Day otherDay) {
return year - otherDay.year;
}
@Override
public String toString() {
return "year=" +year;
}
public int getYear() {
return year;
}
}
复制代码
外部比较器 comparator 主要代码
public class AscOperation implements Comparator<Day> { /** * @desc compare函数。通过year来比较,如果return 的大于0 则前一位排在后一位的后面 * 为升序,如果return 的小于0 则前一位排在后一位的的前面,为降序 */ public int compare(Day day1, Day day2) { return day1.getYear() - day2.getYear(); } } 复制代码
客户端调用代码
public class Main { public static void main(String[] args){ List days =new ArrayList(); days.add(new Day(2018)); days.add(new Day(2017)); days.add(new Day(2019)); //内部实现排序 Collections.sort(days); System.out.printf("list:%s/n",days); //依靠外部方法实现排序 Collections.sort(days,new DescOperation()); System.out.printf("list:%s/n",days); Collections.sort(days,new AscOperation()); System.out.printf("list:%s/n",days); } } 复制代码
原文
https://juejin.im/post/5d6a0673f265da03ef7a2998
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Comparator 和 Comparable 的比较与用法