Java的比较器
比较器使用场景
Arrays 类中的 sort 方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了 Comparable 接口
在java中经常涉及到对象数组的比较的情况,常见的有两种方法来处理:
- 继承comparable接口,并实现compareTo()方法
- 定义一个单独的对象比较器,继承自Comparator接口,实现compare()方法
Comparable
Comparable 简介
Comparable 是排序接口。
若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。
public interface Comparable {
public int compareTo(T o);
}
x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y”。
Comparable的demo
Employee类
public class Employee implements Comparable<Employee>{
private String name;
private Integer age;
private double salary;
public Employee(String name, Integer age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Employee() {
}
@Override
public int compareTo(Employee o) {
if (salary!=o.salary) {
//大的结果为1,1的在后面,想实现降序,*-1
return Double.