比較器Comparable與Comparator實踐
Comparable:該比較器是用于對象的内部比較,比較的是屬性。它的方法:
public int compareTo(T o);
Comparator:該比較器用于對象的外部比較,比較的是對象,一般這個比較的對象也實作了Comparable接口。Comparator的方法有多個,但一般我們隻需要實作:
int compare(T o1, T o2);
執行個體代碼:
聲明一個People類,實作Comparable接口,内部排序優先級,city>age>name>sex。
public class People implements Comparable<People> {
public String name;
public int sex;
public String city;
public int age;
public People(String name, int sex, String city, int age) {
this.name = name;
this.sex = sex;
this.city = city;
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", sex=" + sex +
", city='" + city + '\'' +
", age=" + age +
'}';
}
/**
* 比較規則優先級:city>age>name>sex
*/
@Override
public int compareTo(People people) {
int result = ;
if (people == null) return result;
//比較city
result = people.city.compareTo(city);//String實作了Comparable接口
if (result == ) {//city 相同
result = people.age - age;//比較age
}
if (result == ) {// age相同
result = people.name.compareTo(name);//比較name
}
if (result == ) { //name相同
result = people.sex - sex;//比較sex
}
return result;
}
}
實作一個Comparator比較器
public class PeopleComparator implements Comparator<People> {
@Override
public int compare(People people1, People people2) {
if (people1 != null && people2 != null) {
return people2.compareTo(people1);//後者和前者比較
}
return ;
}
}
測試代碼實作:
public class Test {
public static void main(String[] args) {
List<People> list = new ArrayList<>();
list.add(new People("moly", , "shanghai", ));
list.add(new People("lili", , "beijing", ));
list.add(new People("pop", , "shenzhen", ));
list.add(new People("momo", , "shanghai",
));
System.out.println(list.toString());
Collections.sort(list,new PeopleComparator());
System.out.println(list.toString());
}
}
列印結果:
sort before:[People{name='moly', sex=, city='shanghai', age=}, People{name='lili', sex=, city='beijing', age=}, People{name='pop', sex=, city='shenzhen', age=}, People{name='momo', sex=, city='shanghai', age=}]
sort after:[People{name='lili', sex=, city='beijing', age=}, People{name='momo', sex=, city='shanghai', age=}, People{name='moly', sex=, city='shanghai', age=}, People{name='pop', sex=, city='shenzhen', age=}]