一、自然排序|内部比较器
接口Comparable :此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
方法:int compareTo(T o)
比较此对象与指定对象的顺序。
//自定义比较规则
@Override
public int compareTo(Person o) {
return ...
}
不够符合开闭原则,不灵活,可能频繁修改源代码
二、自定义排序|外部比较器
接口 Comparator :强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
方法:
int compare(T o1, T o2)
比较用来排序的两个参数。
boolean equals(Object obj)
指示某个其他对象是否“等于”此 Comparator。
//重写compare()方法,,自定义比较规则
@Override
public int compare(T o1,T o2){
return o2-o1;//比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
}