引入
“排序”的实体类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法
public int compareTo(Object obj);
返回值
0 表示 this==obj
正数 表示 this > obj
负数 表示 this <obj
实现了Comparable接口的类通过实现CompareTo方法从而确定该类对象的排序方式。
内置类型int,float,char.等等八大类型的都实现了Comparable接口,从而重写了Comparator方法.
1.整数、小数Integer,Float,Double直接比较基本数据类型的大小
2.字符类型:比较的unicode码只差
3.字符串:
1)、如果其中一个是另外一个起始开始的子串,返回长度之差
2)、否则返回第一个不相等的unicode码只差
4、java.util.Date:根据日期的长整形数比较,就是将日期转换成长整形,然后进行整数的比较
图为String重写的Comparator方法
实现一个Comparator比较器
二者的比较
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象, 但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义 的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自 己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。