java.lang.Comparable和java.util.Comparator是java提供的两个可以用来指导排序的接口。
- Comparable
Comparable的用法需要待排序的类直接实现Comparable接口,同时通过在类定义x.compareTo(y)来比较大小。compareTo方法必须确实比较两个对象的内容并返回比较的结果。当x<y,返回负数;当x=y,返回0;当x>y,返回正数。
public interface Comparable<T> {
public int compareTo(T o);
}
示例:
public class Employee implements Comparable<Employee>{
private double salary;
@Override
public int compareTo(Employee other) {
return Double.compare(salary,other.salary);
//注:相减技巧不适用浮点值,很相近时四舍五入可能为0。
}
}
- Comparator
在List或数组中的对象如果没有实现Comparable接口时,那么就需要调用者为需要排序的数组或List设置一个Comparator,通过Comparator的compare方法进行比较,然后根据比较结果进行排序。
//数组排序
Integer[] array = new Integer[]{13,41,5};
Arrays.sort(array,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//lambda表达式
Arrays.sort(array,(o1,o2)->o1-o2);
//集合排序
List<Integer> list = Arrays.asList(13,41,5);
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//lambda表达式
Collections.sort(list,(o1,o2)->o1-o2);