TreeSet实现Comparator接口(Java实例学生成绩信息)

TreeSet的排列顺序与重写的compareTo()方法的返回值有关。
return 0:元素每次进行比较,都认为是相同的元素,这是就不再向TreeSet里面插入除第一个元素以外的元素,所以TreeSet中就只插入了一个元素。
return 1:元素每次进行比较,都认为新插入的元素比上一个元素大,于是二叉树存储时,会储存在根的右侧,读取时就是正序排列,先进先出。
return -1:元素每次进行比较,都认为新插入的元素比上一个元素小,于是二叉树存储时,会储存在根的左侧,读取时就是倒序排列,先进后出。

封装类

package com.hope;

public class Student{//学生类

    private String name;//学生姓名
    private Integer chineseScores;//语文成绩
    private  Integer mathScores;//数学成绩
    private Integer englishResults;//英语成绩
    private  Integer sum;//总分

    public Student(String name, Integer chineseScores, Integer mathScores, Integer englishResults, Integer sum) {
        this.name = name;
        this.chineseScores = chineseScores;
        this.mathScores = mathScores;
        this.englishResults = englishResults;
        this.sum = sum;
    }

    public String getName() {
        return name;
    }

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

    public Integer getChineseScores() {
        return chineseScores;
    }

    public void setChineseScores(Integer chineseScores) {
        this.chineseScores = chineseScores;
    }

    public Integer getMathScores() {
        return mathScores;
    }

    public void setMathScores(Integer mathScores) {
        this.mathScores = mathScores;
    }

    public Integer getEnglishResults() {
        return englishResults;
    }

    public void setEnglishResults(Integer englishResults) {
        this.englishResults = englishResults;
    }

    public Integer getSum() {
        return sum;
    }

    public void setSum(Integer sum) {
        this.sum = sum;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", chineseScores=" + chineseScores +
                ", mathScores=" + mathScores +
                ", englishResults=" + englishResults +
                ", sum=" + sum +
                '}';
    }

}

测试类

package com.hope;

import java.util.Comparator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class TestStudent {
    public static void main(String[] args) {
        /**
         * 键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出
         * 分析:
         * ① 创建学生类(姓名,语文成绩,数学成绩,英语成绩,总分)
         * ② 创建TreeSet集合,用来存储学生对象
         * ③ 录入学生信息
         * ④ 创建学生对象的比较器
         * ⑤ 把学生对象添加到TreeSet集合中
         * ⑥ 遍历集合
         */
        System.out.println("键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩)");
        //TreeSet集合创建对象比较器
        Set<Student> set=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                /**
                 * TreeSet的排列顺序与重写的compareTo()方法的返回值有关。
                 *
                 * return 0:元素每次进行比较,都认为是相同的元素,这是就不再向TreeSet里面插入除第一个元素以外的元素,所以TreeSet中就只插入了一个元素。
                 *
                 * return 1:元素每次进行比较,都认为新插入的元素比上一个元素大,于是二叉树存储时,会储存在根的右侧,读取时就是正序排列,先进先出。
                 *
                 * return -1:元素每次进行比较,都认为新插入的元素比上一个元素小,于是二叉树存储时,会储存在根的左侧,读取时就是倒序排列,先进后出。
                 */
                // 按照总分从高到低输出  不相同最后的返回结果还是sum  100-50
                int sum=s2.getSum()-s1.getSum();
                //总分成绩相同比较语文成绩
                int sum1=sum==0?s1.getChineseScores()-s2.getChineseScores():sum;
                //总分相同比较数学成绩+语文成绩
                int sum2=sum1==0?s1.getMathScores()-s2.getMathScores():sum1;
                //总分相同比较英语成绩+数学成绩+语文成绩
                int sum3=sum2==0?s1.getEnglishResults()-s2.getEnglishResults():sum2;
                //总分相同比较英语成绩+数学成绩+语文成绩+姓名
                int sum4=sum3==0?s1.getName().compareTo(s2.getName()):sum3;
                return sum4;
            }
        });
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入学生姓名:");
            String name=sc.next();
            System.out.println("请输入学生的语文成绩:");
            Integer chineseScores=sc.nextInt();
            System.out.println("请输入学生的数学成绩:");
            Integer mathScores=sc.nextInt();
            System.out.println("请输入学生的英语成绩:");
            Integer englishResults=sc.nextInt();
            Integer sum=chineseScores+mathScores+englishResults;
            Student student = new Student(name, chineseScores, mathScores, englishResults,sum);
            set.add(student);
        }
        //便利set
        for (Student s : set) {
            System.out.println(s.getName() + "\t" + s.getChineseScores() + "\t"
                    + s.getMathScores() + "\t" + s.getEnglishResults()+"\t"+s.getSum());
        }
    }

}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值