Comparable是是一个相同类比较,是个内部排序,类要实现这个comparable接口,然后重写Compara方法,定义比较规则,
而Comparator是不同类比较,其比较的类型不要实现那个接口,只需要重新定义一个类实现Comparator接口,重写Compara()方法就行,定义比较规则
package com.fan.jichu;
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
return this.age-o.age; //升序排序
}
}
package com.fan.jichu;
import java.util.Comparator;
public class NameComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) { //按年龄升序排序
return o1.getName().compareTo(o2.getName());
}
}
package com.fan.jichu;
import java.util.ArrayList;
import java.util.Collections;
public class Test {
public static void main(String[] args) {
ArrayList<Person> people = new ArrayList<>();
people.add(new Person("fjg",23));
people.add(new Person("fll",19));
people.add(new Person("fhh",53));
System.out.println("原始的数据:"+people);
//使用Comparable排序
Collections.sort(people);
System.out.println("sort by age:"+people);
//使用Comparator排序
Collections.sort(people,new NameComparator());
System.out.println("sort by name:"+people);
}
}
运行结果:
原始的数据:[Person{name='fjg', age=23}, Person{name='fll', age=19}, Person{name='fhh', age=53}]
sort by age[Person{name='fll', age=19}, Person{name='fjg', age=23}, Person{name='fhh', age=53}]
sort by name[Person{name='fhh', age=53}, Person{name='fjg', age=23}, Person{name='fll', age=19}]