比较器排序Comparator的使用
- 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法
- 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序
结论
- 用TreeSet集合存储自定义对象,代参构造方法使用的是“比较器排序”对元素进行排序的;
- 比较器排序,就是让集合构造方法接收Comparator实现类对象,重写compareTo(T O1,tO2)方法;
//TreeSetDemo.java
/*比较器排序Comparator的使用 1、存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 2、要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 1、用TreeSet集合存储自定义对象,代参构造方法使用的是“比较器排序”对元素进行排序的; 2、比较器排序,就是让集合构造方法接收Comparator实现类对象,重写compareTo(T O1,tO2)方法; 3、重写方法时,一定注意排序规则,必须按照要求的主要条件和次要条件来写 * * */ import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { //创建TreeSet集合对象 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { int num = s1.getAge() - s2.getAge();//按照年龄有小到大排序 //如果年龄相同,则根据姓名的字母循序排序(采用三元运算符进行比较) int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num; return num2; } }); //创建学生对象 Student s1 = new Student("linqingxia", 35); Student s2 = new Student("zhangmanyu", 30); Student s3 = new Student("wangzuxian", 36); Student s4 = new Student("liudehua", 30); Student s5 = new Student("zhourunfa", 34); Student s6 = new Student("zhourunfa", 34); //将学生添加到集合 ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); ts.add(s6); //采用迭代器遍历集合, /* Iterator<Student> it = ts.iterator(); while(it.hasNext()){ Student s = it.next(); System.out.println(s.getName()+":"+s.getAge()); }*/ //采用增强for遍历集合 for (Student s : ts) { System.out.println(s.getName()+":"+s.getAge()); } } }
Student.java
public class Student { //定义成员变量 private String name; private int age; /*无参构造方法 * 1、与类同名,且没有返回值,甚至连void都没有 * 2、构造出类的实例,且对实例进行初始化 * 3、用new创建对象,且完成对象进行初始化 * */ public Student() { } //有参构造方法 public Student(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName(){ return name; } public int getAge(){ return age; } }