对学生对象排序,有以下三个排序要求,实现它
-
按年龄排序
-
按姓名
-
按姓名长度排序
分析:1.首先创建Students类
2.要想对对象进行排序,必须要实现排序接口的方法
public class StudentsTest{
public static void main(String[] args){
List<Student> list = new ArrayList<>();
list.add(new Student("张三",20));
list.add(new Student("王五",23));
list.add(new Student("李四",21));
list.add(new Student("张飞",22));
// Comparable接口方法
Collections.sort(list);
for(Student s:list)
System.out.println("姓名:"+s.name()+"\t年龄:"+s.age());
System.out.println("*********************");
// Comparable接口方法
Collections.sort(list1,new Student());
for(Student s:list)
System.out.println("姓名:"+s.name()+"\t年龄:"+s.age());
System.out.println("&&&&&&&&&&&&&&&&&&&&&");
// Comparable接口的匿名实现类方法
Collections.sort(list1, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.name().length()-s2.name().length();
}
});
for(Student s:list)
System.out.println("姓名:"+s.name()+"\t年龄:"+s.age());
}
}
Student类:
public class Student implements Comparable,Comparator{
public String name;
public int age;
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
//按年龄,Comparable接口方法
@Override
public int compareTo(Student s) {
if (this.age != s.age)
return this.age - s.age;
else
return 0;
}
//按姓名,Comparator接口方法
@Override
public int compare(Student o1, Student o2) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.name.compareTo(s2,name);
}
}
上面用了三种方法对学生对象进行排序,分别是通过实现Comparable接口的compareTo方法和实现Comparator接口的compare方法,最后是通过Comparator的匿名类方法。
这使我想到通常会有多种按不同条件排序的案例,值得一记。