一、Comparator 和 Comparable 比较
- Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
- Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
二、代码演示
Comparable(内部比较器)
// 类的自定义比较
class Dog implements Comparable<Dog> {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 看你自己默认排序哪一个
@Override
public int compareTo(Dog o) {
return this.age - o.age; //调用Arrays.sort() 默认排序狗的年龄 从小到大排序
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Comparator(外部比较器)
// 想弄实例化的排序就要调用Comparator
class ReverSortDogName implements Comparator<Dog> {
@Override
public int compare(Dog o1, Dog o2) {
return o2.getName().compareTo(o1.getName());
}
}
执行
import java.util.Arrays;
import java.util.Comparator;
public class 简书 {
public static void main(String[] args) {
Dog[] dogs = new Dog[]{new Dog("欧富华", 23), new Dog("xie", 18), new Dog("哈哈", 12)};
// Arrays.sort(dogs);Comparable ,执行这个方法默认是按age从小到大排序
// Arrays.sort(dogs, new ReverSortDogName()); Comparator,按name字符串编码从大到小排序
System.out.println(Arrays.toString(dogs));
}
}