java的Comparator和Comparable
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。
以下是使用Comparator对对象集合排序的一个例子
package test;
import java.util.Comparator;
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public static SortByAge getSortByAge(){
return new SortByAge();
}
public static SortByName getSortByName(){
return new SortByName();
}
/**
* 定义一个静态内部类----排序器
* 也可以定义一个匿名内部类进行排序
*
*/
public static class SortByAge implements Comparator<Person>{
public int compare(Person o1, Person o2) {
if(o1.getAge()>o2.getAge()){
return 1;
}else if(o1.getAge()==o2.getAge()){
return 0;
}
return -1;
}
}
/**
* 定义一个静态内部类----第二个排序器
*
*/
public static class SortByName implements Comparator<Person>{
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
}
public String toString(){
return "name:"+this.name+";age="+this.age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
/**
* 对集合对象进行排序
*/
@Test
public void test3(){
Person t1 = new Person("丁晓宇", 21);
Person t2 = new Person("赵四", 22);
Person t3 = new Person("张三", 11);
Person t4 = new Person("刘武", 19);
Person t5 = new Person("刘武2", 19);
List<Person> list = new ArrayList<Person>();
Collections.addAll(list, t1,t2,t3,t4,t5);
System.out.println(list);
//定义一个排序器
SortByAge sortByAge = Person.getSortByAge();
Collections.sort(list, sortByAge);
System.out.println(list);
//定义第二个排序器
Collections.sort(list, Person.getSortByName());
System.out.println(list);
}