从字面来看,Comparable 可比较的,Comparator 比较器
Comparable
所有可以 “排序” 的类都实现 Comparable 接口,该接口中只有一个
public int compareTo(Object obj) ;
方法。
该方法:
返回 0 表示 this == obj
返回正整数表示 this > obj
返回负整数表示 this < obj
3:实现了 Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式。
// System.out.println("11".compareTo(null));
// 由于 null 不是一个类,也不是一个对象,因此在重写 compareTo 方法时应该注意 e.compareTo(null) 的情况,
// 即使 e.equals(null) 返回 false,compareTo 方法也应该主动抛出一个空指针异常 NullPointerException。
由此可得结论:若是A类实现了Compareble接口,并且重写了compareTo()方法
①:当你在使用Collections/Arrays的sort对该A的对象集合进行排序时,它会按照compareTo()方法中定义的那样进行排序
②:当你使用会自动排序的容器(TreeSet、TreeMap)来存A的对象时,它也会按照compareTo()方法中定义的那样进行排序
③:这个只是简单的根据年龄进行比较,在一些场景下可以写的更丰富,比如在年龄相等的情况下根据其他的东西进行排序等
class Man implements Comparable<Man> {
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Man(Integer age) {
this.age = age;
}
@Override
public int compareTo(Man o) {
return age - o.age;
}
@Override
public String toString() {
return "Man{" +
"age=" + age +
'}';
}
}
Man[] mans = new Man[]{
new Man(3),
new Man(1),
new Man(2),
new Man(6),
new Man(5),
new Man(4)
};
System.out.println(Arrays.toString(mans)); // [Man{age=3}, Man{age=1}, Man{age=2}, Man{age=6}, Man{age=5}, Man{age=4}]
Arrays.sort(mans);
System.out.println(Arrays.toString(mans)); // [Man{age=1}, Man{age=2}, Man{age=3}, Man{age=4}, Man{age=5}, Man{age=6}]
Comparator