首先需要明确的是这俩都是接口。都用来比较两个对象之间的大小。
- comparable
实现comparable的类有很多,比如String,Integer,Character等等,代表它们都是可以排序的。而comparable只有一个方法,就是compareTo。
public int compareTo(T o);
而以上提及的类都实现了各自的compareTo方法,比如Integer类
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
- comparator
对于comparator,如果你想自定义排序,自己定义排序规则,就可以定义一个类继承comparator来实现comparator类中的compare方法.
int compare(T o1, T o2);
boolean equals(Object obj);
这里我就想到一个问题,comparator类中有两个方法是没有default实现的,compare和equals,那为什么不用实现equals呢?后来发现,因为java中所有的类都是默认继承object类,而object类中有默认的equals实现,而默认的equals方法就是用==来判断,也就是判断对象地址是不是一样的