/**
* 当我们使用了Collections.sort(List list,Comparator c)时,也就是自己指定了比较器,
* 则要创建类实现Comparator接口。
*
*/
public class CompareExample
{
public static void main(String[] args)
{
Student s1 = new Student(12,"zhangsan");
Student s2 = new Student(10,"wangwu");
Student s3 = new Student(20,"lisi");
Student s4 = new Student(10,"bixiao");
List l = new ArrayList();
l.add(s1);
l.add(s2);
l.add(s3);
l.add(s4);
/**
* 若使用Collections.sort(),则不用指定比较器,实现Comparable即可
*/
Collections.sort(l, new Student.StudentComparator());//自行指定比较器
System.out.println(l);
}
}
class Student
{
private int age;
private String name;
/**
* Comparator中有equals方法,为什么StudentComparator不用实现equals方法呢?
* 因为StudentComparator是由Object继承而来,在Object中有equals方法,则在StudentComparator中自动实现了equals方法,只不过是空实现而已。
*
*/
static class StudentComparator implements Comparator //使用内部类实现比较器,注意使用了static
{
public int compare(Object o1,Object o2)//注意这里参数的使用
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
/**
* 注意下面的使用方法
*/
int result = s1.age > s2.age ? 1:(s1.age==s2.age ? 0 :-1);
return result;
}
}
public Student(){}
public Student(int age, String name)
{
this.age = age;
this.name = name;
}
}