Java使用TreeSet来排序学生成绩

2023-10-27

Java—TreeSet

TreeSet是一个有序的集合,它的作用是提供有序的Set集合,在java中使用。 下面我们来进行一个实例来操作一下,具体看看怎么使用。

我们的要求是用TreeSet集合存储多个学生对象的姓名,语文和数学成绩,然后按照总分高低输出,如果总分一样,那么就按照语文成绩高低输出,如果都一样就按照姓名的字典顺序输出。要过滤掉相同的学生。
知道了我们的要求,我们就开始构思怎么做了。

1.定义学生类student和集合TreeSet集合对象,然后使用Comparator比较排序器来排序。
2.从键盘输入学生的姓名,俩科成绩。
3.将输入的信息添加到集合对象中去。
4.增强for循环输出。
//student类,这里和前面几篇一样,定义后,然后使用alt + insert来添加方法就可以了。
package new10;

import java.util.Objects;

//Alt Insert生成
public class student {
    private String name;
    private int chinese;
    private int math;

    public student() {
    }

    public student(String name, int chinese, int math) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
    }

    public String getName() {
        return name;
    }

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

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }
    public int getsum(){//这里是方便排序的时候使用,计算总分。
        return this.getMath()+this.getMath();
    }
}
//主函数
package new10;

import javax.swing.tree.TreeCellEditor;
import java.util.*;
/* 学生总成绩排序,总分相同就按照姓名来排*/
public class hello {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //创建集合对象
        TreeSet<student> ts=new TreeSet<student>(new Comparator<student>() {
            @Override  //重写比较器排序函数
            public int compare(student s1, student s2) {
               int num= (s2.getsum())-(s1.getsum());//总分按照高低排序
               int num2= num==0?s2.getChinese()-s1.getChinese():num;//总分一样,按照语文成绩高低排序
               int num3= num2==0?s2.getName().compareTo(s1.getName()):num2;//都一样按照姓名字典排序
               return num3;
                //return 0;
            }
        });
//        //创建学生对象  有参方法自己加入姓名和成绩
//        student s1=new student("张三",80,90);
//        student s2=new student("李四",70,89);
//        student s3=new student("王五",65,78);
//        student s4=new student("阿毛",67,89);
//        student s5=new student("李理",67,89);
//        //将学生对象加入到集合中去
//        ts.add(s1);
//        ts.add(s2);
//        ts.add(s3);
//        ts.add(s4);
//        ts.add(s5);

        for(int i=0;i<4;i++){//自己键盘输入。
            System.out.print("请输入学生姓名");
            String name1=sc.next();
            System.out.print("请输入学生语文成绩");
            int chinese1=sc.nextInt();
            System.out.print("请输入学生数学成绩");
            int math1=sc.nextInt();
            student s=new student();
            s.setName(name1);
            s.setChinese(chinese1);
            s.setMath(math1);
            ts.add(s);
        }
        for(student s:ts){//重写comparable,0是一样的,1是按照给的顺序写,-1是倒着来
            System.out.println(s.getName()+","+s.getChinese()+","+s.getMath()+","+s.getsum());
        }

    }
}

在这里我们要注意一点就是,当 我们输入的成绩总分计算一样的时候,我们要排序,不然那个原本的比较器排序就会,认为是同一个人,所以我们要重写那个方法,还有一点就是都一样,那么他也会认为是相同的,所以我们要添加一个对比姓名是否一样的表达式,这样就没有问题了。下面就是这一块的代码。

 TreeSet<student> ts=new TreeSet<student>(new Comparator<student>() {
            @Override  //重写比较器排序函数
               public int compare(student s1, student s2) {
               int num= (s2.getsum())-(s1.getsum());//总分按照高低排序
               int num2= num==0?s2.getChinese()-s1.getChinese():num;//总分一样,按照语文成绩高低排序
               int num3= num2==0?s2.getName().compareTo(s1.getName()):num2;//都一样按照姓名字典排序
               return num3;
                //return 0;
            }
        });

下面是程序运行的结果
在这里插入图片描述
在这里就可以看见,第二三四名,是按照我们写的那个函数输出的。
最后记住一点,如果要使用TreeSet的话,一定要自己重新写那个Comparable比较器函数(return默认是0),不然他会只录入一行,但是把return 的结果改为1的话,就是按照你录入的顺序输出的,return是-1就是倒序输出。例子如下面。

//student类
public class student implements Comparable{
@Override
    public int compareTo(Object o) {
        return 0;//只会录入一行
        return 1;//按照给的顺序输出
        return -1;//按照给的顺序倒序输出
    }
}
//主函数,定义集合对象
TreeSet<student> ts=new TreeSet<student>();

OK,本文结束,如有错误请指正.
最后祝大家1024节日快乐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java使用TreeSet来排序学生成绩 的相关文章

随机推荐

  • 【论文阅读】Mixed Precision Training

    GiantPandaCV导语 混合精度是一个非常简单并且实用的技术 由百度和谷歌联合发表于ICLR2018 可以让模型以半精度的方式训练模型 既能够降低显存占用 又可以保持精度 这篇文章不是最先提出使用更低精度来进行训练 但是其影响力比较深
  • 该文件没有与之关联的应用程序来执行该操作。请安装应用,请在"默认应用设置"页面中创建关联

    最近在win10新安装的一个应用程序 在程序中打开指定文件时报了 该文件没有与之关联的应用程序来执行该操作 请安装应用 请在默认应用设置 页面中创建关联 原因是该文件没有默认的打开程序 如果是txt或xml这些文件 可以右击这个文件 设置其
  • vscode缩进和Eslint缩进问题解决

    vscode缩进和Eslint缩进问题解决 vscode更改换行时的缩进 如果更改失效 取消该属性勾选 Eslint 缩进校验修改
  • 解决问题记录2:项目内使用lombok的@Log4j2失效

    问题描述 在使用Log4j2注解后 程序中使用log 启动加载时报错 找不到相对的依赖 检查lombok的依赖是正确的添加的 问题解决 尝试了网上的众多方法都没有解决 后想到是否是有其他的jar内做了lombok的依赖 导致依赖到了其他ja
  • JSP使用最简单的echarts图入门

    jsp使用最简单的echarts图表 jsp项目中应用最简单的一个折线图 柱状图等 一 echarts官网使用 首先打开echarts的api官方文档 官网 https echarts apache org examples zh inde
  • 算法的复杂度

    常用的算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O n2 O n2 稳定 O 1 快速排序 O n2 O n log2n 不稳定 O log2n O n 选择排序 O n2 O n2
  • 我在知乎学写作

    最懂技术的传播者 最懂传播的工程师 最近被知乎成功 忽悠 报名了一个 写作新人培养计划 的课程 写作新人 这老黄瓜未免也太能给自己刷绿漆了吧 心里头想着 还是得push自己 在内容创作的道路上 搞点事情啊 咋回事呢 为什么是知乎 从媒体江湖
  • Ubuntu20.04 ROS noetic安装教程

    注意 本贴是ros官网的方法 使用ros原版官方源 不是国内镜像 适合网络环境比较好的小伙伴 添加源 sudo sh c echo deb http packages ros org ros ubuntu lsb release sc ma
  • NUC980开源项目6-获取官方源码

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • vulnhub靶机Thoth-Tech

    下载地址 https download vulnhub com thothtech Thoth Tech ova 主机发现 arp scan l 目标 192 168 21 148 端口扫描 nmap min rate 10000 p 19
  • 页面服务器不稳定因为什么,关于网站出现“该页面因服务器不稳定可能无法正常访问”的提示...

    TOC 网站的说法 原文链接 http bbs 360 cn thread 15235172 1 1 html 关于网站出现 该页面因服务器不稳定可能无法正常访问 的提示 近期我们接到一些用户反馈 网站出现 该页面因服务器不稳定可能无法正常
  • Istio是啥?一文带你彻底了解!

    Istio是啥 一文带你彻底了解 什么是 Istio 官方对 Istio 的介绍浓缩成了一句话 An open platform to connect secure control and observe services 翻译过来 就是
  • IDEA快速搭建SpringBoot项目

    项目搭建 创建项目 配置项目信息 依赖选择 可选可不选 根据实际需求来 主要都是后期导入 先选择的话 选择Web下的SpringWeb以及Template Englines下的Thymeleaf就够用了 SQL可以勾选MySQL Drive
  • Android蓝牙连接出现133的解决办法

    代码片段 出现连接133的问题找了很久的解决办法 尝试各种亦然不行 最终的解决办法就是下面标红代码 if status BluetoothGatt GATT SUCCESS if newState gatt STATE CONNECTED
  • redis配置文件详解

    redis配置文件详解 1 开头说明 这里没什么好说的 需要注意的是后面需要使用内存大小时 可以指定单位 通常是以 k gb m的形式出现 并且单位不区分大小写 2 INCLUDES 我们知道Redis只有一个配置文件 如果多个人进行开发维
  • 新建虚拟机与本机ping不通(一招解决)

    初始新建虚拟机或者复制虚拟机后 发现虚拟机能ping通内外网 但是本机无法ping通虚拟机 xshell也无法连接虚拟机 这时候就很头疼了 因为要上传很多文件到虚拟机上面 解决办法 1 关闭虚拟机后 打开虚拟机的虚拟网络编辑器 虚拟机 编辑
  • 抖音直播伴侣使用教程

    抖音直播伴侣使用教程分享 红色框区域 管理场景 添加素材 切换横竖屏 蓝色框区域 常用直播功能 绿色框区域 开关播控制 性能占用情况 官方公告 黄色框区域 直播榜单 白色框区域 弹幕窗口 中央区域 直播画面采集预览 抖音直播伴侣功能介绍 添
  • Vue入门

    npm install g cnpm registry https registry npm taobao org cnpm install global vue cli vue init webpack my project cd my
  • 大厂 H5 开发实战手册

    京东凹凸实验室 Aotu io 英文简称 O2 创立于 2015 年 10 月 为掘金最早一批联合编辑 拥有数千关注者 O2 对内负责京东 PC 端首页 多个频道页 小程序版本京东购物 微信手 Q 京东购物 M 端京东 各类营销活动场景 H
  • Java使用TreeSet来排序学生成绩

    Java TreeSet TreeSet是一个有序的集合 它的作用是提供有序的Set集合 在java中使用 下面我们来进行一个实例来操作一下 具体看看怎么使用 我们的要求是用TreeSet集合存储多个学生对象的姓名 语文和数学成绩 然后按照