Java TreeSet集合 比较器排序Comparator的使用

比较器排序Comparator的使用

  • 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法
  • 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序

结论

  • 用TreeSet集合存储自定义对象,代参构造方法使用的是“比较器排序”对元素进行排序的;
  • 比较器排序,就是让集合构造方法接收Comparator实现类对象,重写compareTo(T O1,tO2)方法; 3、重写方法时,一定注意排序规则,必须按照要求的主要条件和次要条件来写
//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;
    }
}
原文地址:https://www.cnblogs.com/henrypaul/p/12316018.html