Java-Set集合(2)

比较器排序

  • 比较器排序:
    采用有参构造,构造的参数就要一个比较器
 TreeSet(Comparator<? super E> comparator)
  • 在创建TreeSet 对象的时候,传进来一个比较器的子类对象
    根据子类对象重写比较器中compare 方法,根据此方法的返回值的正负和0,来排序元素,返回0就不往里面存
    a.构造一个新的空 TreeSet,它根据指定比较器进行排序。
    b.接口 Comparator 比较器
    c.int compare(T o1, T o2) 比较方法
    d.比较用来排序的两个参数。
public class MyTest3 {

        public static void main(String[] args) {

        TreeSet t = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer s1, Integer s2) {
                return s1 - s2;
            }
        });
        t.add(6);
        t.add(6);
        t.add(3);
        t.add(2);
        t.add(1);
        t.add(4);
        t.add(5);
        t.add(4);
        t.add(3);
        System.out.println(t);
        //[1, 2, 3, 4, 5, 6]
    }
}
  • 举例:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
//Student类
public class Student {
    private String name;
    private double mathScore;
    private double englishScore;
    private double totalScote;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMathScore() {
        return mathScore;
    }

    public void setMathScore(double mathScore) {
        this.mathScore = mathScore;
    }

    public double getEnglishScore() {
        return englishScore;
    }

    public void setEnglishScore(double englishScore) {
        this.englishScore = englishScore;
    }


    public double getTotalScote() {
        return this.englishScore+this.mathScore;
    }
}

//测试类
public class MyTest2 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        //比较器排序
        TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                return (int) (s1.getTotalScote() - s2.getTotalScote());
            }
        });
        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入学生的姓名");
            Student student = new Student();
            String name = sc.next();
            student.setName(name);
            System.out.println("请输入第" + i + "个学生" + name + "的数学成绩");
            double mathScore = sc.nextDouble();
            student.setMathScore(mathScore);
            System.out.println("请输入第" + i + "个学生" + name + "的英语成绩");
            double englishScore = sc.nextDouble();
            student.setEnglishScore(englishScore);
            //把学生对象添加到集合里面
            treeSet.add(student);
        }

        System.out.println("姓名" + "\t" + "数学成绩" + "\t" + "总分");
        for (Student stu : treeSet) {
            System.out.println(stu.getName() + "\t" + stu.getMathScore() + "\t" + stu.getEnglishScore() + "\t" + stu.getTotalScote());
        }


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值