【Set集合案例】成绩排序和不重复的随机数

news2024/11/16 5:59:11

Set集合案例:成绩排序和不重复的随机数

1.成绩排序

需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合

​ 要求:按照总分从高到底出现

思路:

1.定义学生类

2.创建TreeSet集合对象,通过比较器和自然排序两种方式进行排序

TreeSet集合不能存储重复的元素,要求是按照总分从高到低出现,当存入一个总分相同的元素时,按照语文成绩升序排序,如果存入的语文成绩和集合中已经存入的语文成绩也相同时,那么数学成绩也是相同的,这时我们按照姓名的字母顺序进行排序

使用比较器排序方式

定义学生类:

package com.gather.set.treeset;
public class Student3 {
    private String name;
    private int chinese;
    private int math;
    public Student3() {
    }

    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 Student3(String name, int chinese, int math) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;

    }

    public int getSum() {
        return this.chinese + this.math;
    }
}

测试类:

package com.gather.set.treeset;
//使用比较器排序
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo04 {
    public static void main(String[] args) {
        TreeSet<Student3> ts = new TreeSet<Student3>(new Comparator<Student3>() {
            @Override
            public int compare(Student3 s1, Student3 s2) {
                //int num = (s2.getChinese() + s2.getMath()) - (s1.getChinese() + s1.getMath());
                //主要条件
                int num = s2.getSum() - s1.getSum();
                //次要条件(分析)
                int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;//语文成绩按照升序排列
                int num3 = num2 == 0 ? s1.getName().compareTo(s2.getName()) : num2;
                return num3;
            }
        });
        Student3 s1 = new Student3("郝佳乐", 80, 90);
        Student3 s2 = new Student3("张三", 60, 72);
        Student3 s3 = new Student3("李四", 75, 86);
        Student3 s4 = new Student3("张飞扬", 79, 95);
        Student3 s5 = new Student3("张曼玉", 80, 94);
        Student3 s6 = new Student3("赵云", 80, 94);
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        for (Student3 s : ts) {
            System.out.println(s.getName() + "," + s.getChinese() + "," + s.getMath() + ",总分:" + s.getSum());
        }
    }
}

使用比较器排序方式

定义学生类:

package com.gather.set.treeset;
public class Student2 implements Comparable<Student2> {
    private String name;
    private int chinese;
    private int math;
    public Student2() {
    }

    public Student2(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.chinese+this.math;
    }

    @Override
    public int compareTo(Student2 s) {
        int num=this.getSum()-s.getSum();
        int num2=num==0?this.chinese-s.chinese:num;
        int num3=num2==0?this.name.compareTo(s.name):num2;

        return num3;
    }
}

测试类:

package com.gather.set.treeset;
//使用自然排序进行排序
import java.util.TreeSet;
public class TreeSetDemo05 {
    public static void main(String[] args) {
        TreeSet<Student2> ts=new TreeSet<Student2>();
        Student2 s1 = new Student2("郝佳乐", 80, 90);
        Student2 s2 = new Student2("张三", 60, 72);
        Student2 s3 = new Student2("李四", 75, 86);
        Student2 s4 = new Student2("张飞扬", 79, 95);
        Student2 s5 = new Student2("张曼玉", 80, 94);
        Student2 s6 = new Student2("赵云", 80, 94);
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        for (Student2 s:ts){
            System.out.println(s.getName()+","+s.getChinese()+","+s.getMath()+",总分:"+s.getSum());
        }
    }
}

在这里插入图片描述

2.不重复的随机数

需求:编写一个程序,获取10个1-20之间的随机数,要求随机数不能重复,并在控制台输出

思路:

1.创建Set集合对象

2.创建随机数对象

3.判断集合的长度是不是小于10

​ 是:产生一个随机数,添加到集合

​ 回到第三步继续判断(循环)

4.遍历集合

package com.gather.set.example;

import java.util.HashSet;
import java.util.Random;
//import java.util.Set;
import java.util.TreeSet;
public class SetDemo {
    public static void main(String[] args) {
        //创建Set集合
        //Set<Integer> set=new HashSet<Integer>();//无序的
        TreeSet<Integer> ts=new TreeSet<Integer>();//有序的
        //创建随机数对象
        Random r=new Random();
        //判断集合的长度是否小于10
        while (ts.size()<10){
            //产生一个随机数添加到集合
            int number = r.nextInt(20)+1;
            ts.add(number);
        }
        for (Integer i:ts){
            System.out.println(i);
        }
    }
}

在这里插入图片描述

这个案例可以既可以使用Set集合也可以使用TreeSet集合,使用Set集合时遍历出来的随机数是无序的,而使用TreeSet集合遍历输出的随机数是排序好的,有序的输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

都2023年了,Python 和Java 哪个更适合做自动化测试?

大家好。从事软件测试很多年了&#xff0c;从各个大厂一路摸爬滚打&#xff0c;现在我有幸供职于字节跳动。个人也是从功能测试慢慢爬到了自动化测试这条路上。所以针对这个问题&#xff0c;我还有点发言权。 记得我一开始从功能准备转型到自动化测试&#xff0c;和很多“涉事…

Qt QPushButton背景图片

一、问题 使用控件显示图片缩略图&#xff0c;当点击控件时&#xff0c;弹出窗口显示完整的图片 二、分析 应该用按钮控件&#xff0c;用信号槽连接。按钮控件是有参数icon&#xff0c;但是只能显示控件中&#xff0c;不能覆盖在整个控件上。 三、方法一&#xff1a;使用st…

线段树算法(C++/C)

目录​​​​​​​ 一、线段树算法的概念 二、为什么需要线段树 三、线段树算法的实现 &#xff08;1&#xff09;建树 &#xff08;2&#xff09;查询 &#xff08;3&#xff09;修改 &#xff08;4&#xff09;综合代码&#xff0c;求区间和 &#xff08;5&#xff…

从“互联网+”到“互联网医疗+”,免费互联网医院开创新格局

随着互联网的发展&#xff0c;各行各业都在积极探索“互联网”时代下的创新模式。其中&#xff0c;医疗领域也开始了自己的变革之路&#xff0c;从传统的医疗模式转向了“互联网医疗”的新型格局。免费互联网医院的出现&#xff0c;则更是为这一变革注入了新的活力。 所谓“互联…

【嵌入式系统应用开发】FPGA——基于HC-SR04超声波测距

文章目录 前言环境目标结果 1 实验原理1.1 超声波原理1.2 硬件模块时序图1.3 模块说明 2 设计文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 3 实验验证3.1 编译3.3 硬件测试 总结 前言 环境 硬件 DE2-115 HC-SR04超声波传感器软件 Quartus 18.1 目标结果 使用DE2-115开发…

【Linux驱动】认识驱动(驱动的概念、驱动分类)

目录 1、什么是驱动&#xff1f; 2、应用程序调用驱动基本流程 3、file_operations 结构体 4、驱动的分类 1、什么是驱动&#xff1f; 驱动就是一段程序&#xff0c;能够获取外设或者传感器数据、控制外设。驱动获取到的数据会提交给应用程序。 在 Linux 中一切皆为文件&…

【实用篇】Elasticsearch02

文章目录 分布式搜索引擎021.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.示例1.2.4.总结 1.3.精准查询1.3.1.term查询1.3.2.range查询1.3.3.总结 1.4.地理坐标查询1.4.1.矩形范围查询1.4.2.附近查询 1.5.复合查询1.5.1.相关性算分1.5.2.算分…

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决 问题 Linux系统中&#xff0c;在rc.local里面配置的启动命令等不能能够在开机的时候进行自启动 问题解决 解决问题排查中最大的麻烦&#xff0c;需要进行reboot重启 查看rc-local的运行状态 systemctl status r…

clickhouse简介与实战

文章目录 1&#xff1a;简介1.1&#xff1a;CH是什么&#xff1f;1.2&#xff1a;CH优缺点1.2.1&#xff1a;优势1.2.2&#xff1a;缺点 1.3&#xff1a;架构设计 2&#xff1a;CH接口3&#xff1a;CH引擎1&#xff1a;数据库引擎3.1.1:mysql引擎 2&#xff1a;表引擎3.2.1&…

路径规划算法:基于模拟退火优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于模拟退火优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于模拟退火优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

基于flask的web应用开发——访问漂亮的html页面以及页面跳转

目录 0. 前言1. html基本知识2. 编写html文本3. 在Flask中设置访问html4. 实现点击跳转 0. 前言 本节学习如何在flask应用程序下让用户访问你提前制作好的html页面 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 Python解释器版本&am…

(学习日记)2023.04.27

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

防火墙之IPSec VPN实验

防火墙IPSec VPN实验 原理概述: 指采用IPSec协议来实现远程接入的一种VPN技术&#xff0c;IPSec全称为Internet Protocol Security&#xff0c;是由Internet Engineering Task Force (IETF) 定义的安全标准框架&#xff0c;在公网上为两个私有网络提供安全通信通道,通过加密通道…

【数据结构】单调栈

目录 1.概述2.代码框架2.1.单调递增栈2.2.单调递减栈 3.应用3.1.应用一3.2.应用二 1.概述 &#xff08;1&#xff09;单调栈是一种特殊的栈&#xff0c;它在普通栈的基础上要求从栈顶到栈底的元素是单调的&#xff0c;如果栈中的元素从栈顶到栈底是单调递增的&#xff0c;那么…

Linux CGroup 原理

Linux CGroup 原理 1、CGroup简介 cgroups是Linux下控制一个&#xff08;或一组&#xff09;进程的资源限制机制&#xff0c;全称是control groups&#xff0c;可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制&#xff0c;比如8核的机器上…

JAVA用tess4j识别复杂的验证码,自定义字库,计算题验证码,jTessBoxEditor,tess4j,验证码识别

JAVA用tess4j识别复杂的验证码&#xff0c;自定义字库&#xff0c;计算题验证码 场景JAVA用tess4j识别文本MAVEN依赖traineddata文件下载识别英文识别中文 JAVA用tess4j识别验证码常见验证码的类型识别 自定义字库&#xff0c;提高识别率下载jTessBoxEditor解压运行准备素材合并…

微信小程序入门笔记

常用技术&#xff1a;开源库 图表&#xff1a;wxcharts-min.js 网络通信&#xff1a;类似 ajax ui: WeUi JSON 配置文件 小程序中&#xff0c;包含唯一的全局配置文件 app.json&#xff0c;以及每个页面的配置文件 page.json。每单页页面相应的 JSON 文件会覆盖与 app.json相同…

门控时钟检查(clock gating check)的理解和设计应用(上)

在笔者的一篇老文Clock Gating之浅见 中&#xff0c;一起探讨过工具处理门控时钟的方法和门控时钟所带来的相关收益和面积代价。除此之外&#xff0c;门控时钟的检查&#xff08;clock-gating check&#xff09;在STA中也有相应的处理方式&#xff0c;通过这篇文章&#xff0c;…

4年测试经验,一问三不知,过于离谱...

公司今年要招人&#xff0c;面倒是面了很多测试&#xff0c;但没有一个合适的。一开始想要的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;当然来了更好&#xff0c;提供的薪资在10-20k,来面试的人有很多&#xff0c;但平均水准真的是让人失望。 看简历时很多都写着3…

【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯

此前我们已经配置好了 瑞萨 MCU MDK RASC 的开发环境&#xff0c;接下来进入到瑞萨 MCU 的 HelloWorld 环节&#xff0c;使用 MDK 点亮两个 LED 灯。 这次我们使用的是瑞萨和 RT-Thread 联合推出的 HMI-Board 开发板。 HMI-Board 开发板简介 HMI-Board 为 RT-Thread 联合瑞…