先总结:
我们可以看出这两个接口都是都是用来做引用类型比较规则的,
Comparator接口需要在额外写一个类来实现compare()
或者在参数里直接匿名一个(new Comparator(o1,o2) -> {~~~})可以lambda表达式优化,维护的时候比较好维护灵活,不嵌入比较的类
Comparable接口在这个需要做比较的类上直接实现compareTo,比较适合比较规则已固定。
队列的排序算法遇到过实现Comparable接口,重写compareTo()的时候
## 直接上代码
//固定在这里类里,适合比较规则不改了场景
Comparable
public class Person implements Comparable
int age;
public Person(String name, int age) {
super();
this.age = age;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person p) {
return this.age - p.getAge();
}
public static void main(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");
for (Person person : people)
{
System.out.print(person.getAge());
}
Arrays.sort(people);
System.out.println("排序后");
for (Person person : people)
{
System.out.print(person.getAge());
}
}
}
============================================
Comparator接口额外的比较类需要实现Arrays.sort第二个参数传入这个比较类对象);
class PersonCompartor implements Comparator
{
@Override
public int compare(Person o1, Person o2)
{
return o1.getAge()-o2.getAge();
}
}
public class Person
{
int age;
public Person(String name, int age)
{
super();
this.age = age;
}
public int getAge()
{
return age;
}
public static void main(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");
for (Person person : people)
{
System.out.print(+person.getAge());
}
//维护的时候因为没有嵌入,更换也灵活
Arrays.sort(people,new PersonCompartor());
System.out.println("排序后");
for (Person person : people)
{
System.out.print(person.getAge());
}
}
}
============================================



