List集合排序:
sort方法的参数是一个List集合,对List集合中的数据排序
如果List集合中的元素,每个元素内部只有一个数据,就直接
比较即可,前提要保证元素中的数据类型,必须重写了compareTo方法
如果List集合中的元素,且每个元素中有很多的其他数据,就需要
把元素的类型实现Comparable接口,并重写CompareTo方法
在此方法中指定排序的原则.
sort方法的参数有两个,一个是要排序的list数据,
另一个参数是比较器接口Comparator接口,在此比较器中
执行要排序的原则,使用比较器的方式就不用对要比较的结合
中的元素类型实现Comparable接口
可以实现多个比较器,每个比较器对应一种排序原则
总结:
如果就一种排序原则,用Comparable接口
如果有多种比较原则,就用Comparator接口
@Override//------>实现Comparable接口,并重写CompareTo方法
public int compareTo(Student o) {
//给name排序
int value=this.getName().compareTo(o.getName());
//给age排序
//int value=this.getAge()-o.getAge();
//给stuNo排序
//int value=this.getStuNo().compareTo(o.getStuNo());
return value;
}
public void sortStudent(){
ArrayList stus=new ArrayList();
Student stu1=new Student("zhangsan",20,"S001");
Student stu2=new Student("lisi",20,"S001");
Student stu3=new Student("wangwu",20,"S001");
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
System.out.println("---------排序前-------------");
for(Student stu : stus){
System.out.println("name="+stu.getName()
+" age="+stu.getAge()
+" stuNo="+stu.getStuNo());
}
System.out.println("---------开始排序-------------");
Collections.sort(stus);//------->需要在Student类中实现Comparable接口,并重写CompareTo方法
System.out.println("---------排序后-------------");
for(Student stu : stus){
System.out.println("name="+stu.getName()
+" age="+stu.getAge()
+" stuNo="+stu.getStuNo());
}
}
//此方法是为了获取一个List集合
public List getTeachers(){
ArrayList teas=new ArrayList();
Teacher tea1=new Teacher("zhangsan",21,18000);
Teacher tea2=new Teacher("lisi",20,15000);
Teacher tea3=new Teacher("王五",22,20000);
teas.add(tea1);
teas.add(tea2);
teas.add(tea3);
return teas;
}
//排序,根据指定Comparator的排序原则,按名称排序的策略实现
public void sortName(List teas){
Collections.sort(teas,new Comparator(){//回调compare方法
//匿名内部类 --->多态--->策略设计模式
@Override
public int compare(Teacher o1, Teacher o2) {
int value=o1.getName().compareTo(o2.getName());
return value;
}
});
}
//排序,根据指定Comparator的排序原则,按年龄排序的策略实现
public void sortAge(List teas){
Collections.sort(teas,new Comparator(){
@Override
public int compare(Teacher o1, Teacher o2) {
int value=o1.getAge()-o2.getAge();
return value;
}
});
}
//排序,根据指定Comparator的排序原则,按年龄排序的策略实现
public void sortSalary(List teas){
Collections.sort(teas,new Comparator(){
@Override
public int compare(Teacher o1, Teacher o2) {
int value=o1.getSalary()-o2.getSalary();
return value;
}
});
}