Comparable 和 Comparator都是通过接口的方式实现自定义排序。
区别在于, Comparable需要在类中覆盖compareTo方法,Comparator新定义一个类并覆盖compare方法。 Comparable书写简洁,Comparator不用修改原先的代码。
Comparable用法
class Person implements Comparable<Person>{
public String name;
public int age;
Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person per){
if(this.age == per.age){
return this.name.compareTo(per.name);
}
return this.age - per.age;
}
}
Array.sort(PersonList)
Comparator用法
- 即插即用
Arrays.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.age == o2.age){
return o1.name.compareTo(o2.name);
}
return o1.age - o2.age;
}
});
- 事先定义
class PersonComparator implements Comparator<Person> {
public int compare(Person one, Person another) {
int i = 0;
i = one.name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
return one.age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
Arrays.sort(PersonList, new PersonComparator());
Note:1:升序;-1:降序。