以下为 Jean 学习笔记和习题整理,供学习和参考
# Comparable
只有一个方法:
public int compareTo(T o);
compareTo 方法的返回值是 int,有三种情况:
- 1、比较者 (调用 compareTo 方法者) 大于被比较者(也就是 compareTo 方法接受对象),那么返回 1
- 2、比较者等于被比较者,那么返回 0
- 3、比较者小于被比较者,那么返回 -1
Comparable 可以认为是一个内比较器,很多类都会实现这个接口以提供对该类对象之间比较的默认实现;比如 String,Integer,Float,Double 类都实现了 Comparable 接口。String 可以排序是 String 实现了 Comparable 接口
实现一个类如果需要实现比较大小,那么继承 Comparable 接口,泛型参数 T 是比较谁就写谁:
public class Domain implements Comparable<Domain> { |
Comparable 接口就是用于给类提供默认比较功能的。
# Comparator
Comparator 可以认为是是一个外比较器,认为有两种情况可以使用实现 Comparator 接口的方式:
- 一个对象不支持自己和自己比较(没有实现 Comparable 接口),但是又想对两个对象进行比较;一般同类型对象比较很少实现这个接口。
- 一个对象实现了 Comparable 接口,但是开发者认为 compareTo 方法中的比较方式并不是自己想要的那种比较方式。Comparator 接口更多是实现这个功能。对特定比较需求提供支持。
int compare(T o1, T o2);
Comparator 接口里面有一个 compare 方法,方法有两个参数 T o1 和 T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和 Comparable 接口一样是 int,有三种情况:
- 1、o1 大于 o2,返回 1
- 2、o1 等于 o2,返回 0
- 3、o1 小于 o3,返回 - 1
❓问题一:comparable 与 comparator 有什么区别?