对象的排序可以有两种实现方式:Comparator和Comparable
Comparator会与当前类绑定,Comparable则不会强制与当前类进行绑定,比较灵活。
1、实现Compare接口
这个接口需要跟一个类绑定,例子如下:
按人名排序
public class Person implements Comparable<Person> {
private Stringname ;
public Person(String name) {
this.name = name;
}
public int compareTo(Person person) {
return this.name.compareTo(person.getName());
}
public String getName() {
return this.name ;
}
public String toString(){
return this.name;
}
}
public class ArraysSortUnit {
public static void main(String[] args) {
Person[] ps = { new Person("li6" ),new Person("li2" ),
new Person("li85"),new Person("li56"),
new Person("li4" ),new Person("li9" ),
new Person("li3") };
System.out.println(Arrays.toString(ps));
Arrays.sort (ps);
System.out.println(Arrays.toString(ps));
}
}
输出结果如下:
[li6, li2, li85, li56, li4, li9, li3]
[li2, li3, li4, li56, li6, li85, li9]
2、实现Comparator接口
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {
public int compare(Person person1, Person person2) {
if(person1 ==null || person1.getName() ==null){
return -1;
}
if(person2 ==null){
return 1;
}
return person1.getName().compareTo(person2.getName());
}
}
import java.util.Arrays;
import java.util.Collections;
public class ArraysSortUnit {
public static void main(String[] args) {
Person[] ps = { new Person("li6" ),new Person("li2" ),
new Person("li85"),new Person("li56"),
new Person("li4" ),new Person("li9" ),
new Person("li3") };
System.out.println(Arrays.toString(ps));
Collections.sort(Arrays.asList(ps) ,new PersonComparator());
System.out.println(Arrays.toString(ps));
}
}
输出结果如下:
[li6, li2, li85, li56, li4, li9, li3]
[li2, li3, li4, li56, li6, li85, li9]