关于TreeSet的练习

一、TreeSet

首先呢我们要知道TreeSet是集合的一种,它可以进行排序并且可以保证元素唯一;TreeSet排序又分为自然排序和比较器排序,这两种排序方法的使用主要取决于构造方法的使用,无参构造是自然排序,而有参构造是比较器排序。
其次我们要知道TreeSet集合的底层是二叉树结构,同时也是红黑树(红黑树就是一种可以自平衡的二叉树)。

二、小练习

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
//需求:
//  键盘录入五位同学的姓名、语文成绩、数学成绩、英语成绩,并按照总分从高到低排序
//分析:
//  A、创建学生类
//  B、创建TreeSet集合对象
//  C、键盘录入学生姓名、语文成绩、数学成绩、英语成绩
//  D、按照总分从高到低排序
public class SetTest {
    public static void main(String []args){
        TreeSet<Student> ts= new TreeSet<>(new Comparator<Student>(){ 
            @Override
            public int compare(Student s1, Student s2){
                int sum =s2.getSum()-s1.getSum();
                int sum2=sum==0?s1.getChineseGrade()-s2.getChineseGrade():sum;
                int sum3=sum2==0?s1.getMathGrade()-s2.getMathGrade():sum2;
                int sum4=sum3==0?s1.getEnglishGrade()-s2.getEnglishGrade():sum3;
                int sum5=sum4==0?s1.getName().compareTo(s2.getName()):sum4;
                return sum5;
            }  
        });
        System.out.println("开始录入学生信息");
        for(int i=1;i<=5;i++) { 
            
            Scanner sc =new Scanner(System.in);
            System.out.println("请输入第"+i+"个同学的姓名");
            String name=sc.nextLine();
            System.out.println("请输入第"+i+"个同学的语文成绩");
            int chineseGrade=sc.nextInt();
            System.out.println("请输入第"+i+"个同学的数学成绩");
            int mathGrade=sc.nextInt();
            System.out.println("请输入第"+i+"个同学的英语成绩");
            int englishGrade=sc.nextInt();
            Student s=new Student();
            s.setName(name);
            s.setChineseGrade(chineseGrade);
            s.setMathGrade(mathGrade);
            s.setEnglishGrade(englishGrade);
            ts.add(s);
        }
        System.out.println("学生信息如下(按照成绩从高到低排列)");
        System.out.println("姓名\t语文成绩\t数学成绩\t英语成绩");
        for(Student s : ts)
            System.out.println(s.getName()+"\t"+s.getChineseGrade()+"\t"+s.getMathGrade()+"\t"+s.getEnglishGrade());
        
    }
}

输出:

run:
开始录入学生信息
请输入第1个同学的姓名
ll
请输入第1个同学的语文成绩
90
请输入第1个同学的数学成绩
80
请输入第1个同学的英语成绩
90
请输入第2个同学的姓名
kk
请输入第2个同学的语文成绩
90
请输入第2个同学的数学成绩
79
请输入第2个同学的英语成绩
67
请输入第3个同学的姓名
nn
请输入第3个同学的语文成绩
90
请输入第3个同学的数学成绩
78
请输入第3个同学的英语成绩
69
请输入第4个同学的姓名
hh
请输入第4个同学的语文成绩
67
请输入第4个同学的数学成绩
90
请输入第4个同学的英语成绩
78
请输入第5个同学的姓名
aa
请输入第5个同学的语文成绩
90
请输入第5个同学的数学成绩
90
请输入第5个同学的英语成绩
90
学生信息如下(按照成绩从高到低排列)
姓名	语文成绩	数学成绩	英语成绩
aa		90			90			90
ll			90			80			90
nn		90			78			69
kk		90			79			67
hh		67			90			78
成功构建 (总时间: 47 秒)

总结:
今天的学习就到这啦,我要去看小说了,哈哈哈哈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值