博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Comparator 与 Comparable 的区别
阅读量:5162 次
发布时间:2019-06-13

本文共 1368 字,大约阅读时间需要 4 分钟。

(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
Date类中的comparaTo方法

 

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

 

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

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

1 public interface Comparable
{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

你可能感兴趣的文章
KnockOut循环绑定
查看>>
Windows API封装:LoadLibrary/FreeLibrary
查看>>
web配置详解
查看>>
git+TortoiseGIT+github/码云
查看>>
解决Hibernate保存到数据时中文乱码问题
查看>>
跳转作业
查看>>
Hibernate简单实例
查看>>
ATL ActiveX全屏
查看>>
Linux下安装渗透测试框架Metasploit
查看>>
机器学习常见算法分类汇总
查看>>
Git——开启区分大小写
查看>>
使用jekyll在GitHub Pages上搭建个人博客【转】
查看>>
java之struts2的数据处理
查看>>
java之struts框架入门教程
查看>>
B. An express train to reveries(Round 418)
查看>>
不要逼孩子考100分
查看>>
Python(四)
查看>>
Symbols of String Pattern Matching
查看>>
如何判断一个人的能力
查看>>
【学习笔记】 狄利克雷与莫比乌斯
查看>>