比较器排序
-
案例需求
- 存储学生对象并遍历,创建TreeSet集合使用带参构造方法
- 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
-
实现步骤
- 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
- 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
- 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
示例
package com.ningxiao.day19;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo08 {
public static void main(String[] args) {
TreeSet<Student> tree = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int a = o1.getAge() - o2.getAge();
if (a==0){
return o1.getName().compareTo(o2.getName());
//String类型的compareTo()方法
}
return a;
}
});
Student st1 = new Student("小明",10);
Student st2 = new Student("小刚",12);
Student st3 = new Student("小花",13);
Student st4 = new Student("小红",14);
Student st5 = new Student("小强",14);
Student st6 = new Student("小李",16);
tree.add(st1);
tree.add(st2);
tree.add(st3);
tree.add(st4);
tree.add(st5);
tree.add(st6);
for (Student st :tree){
System.out.println(st);
}
}
}
总结:
说白了,就是将我们在自定义的类中的compareTo()方法,在集合创建的时候使用带参构造方法,匿名重写在了集合里面,直接写了compare方法。写法和重写compareTo()方法是一样的。