JAVA Set案例(HashSet集合存储学生对象并遍历)

本篇博客介绍了如何使用Java集合框架中的HashSet和TreeSet。首先展示了如何创建并遍历HashSet来存储和显示学生对象,强调了对象相等性的概念。接着,通过TreeSet实现按总分排序的学生信息存储,自定义比较器以实现降序排列。最后,演示了如何生成不重复的随机数集合,利用TreeSet的排序特性确保随机数的唯一性。
摘要由CSDN通过智能技术生成
  1. 案例:HashSet集合存储学生对象并遍历
    需求:创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合。
    要求:学生对象的成员变量值相同,我们就认为是同一个对象。
    分析:
    (1)定义学生类
    (2)创建HashSet集合对象
    (3)创建学上对象
    (4)把学生添加到集合
    (5)遍历集合(增强for)
    (6)在学生类中重写两个方法
    在这里插入图片描述
    完整代码:
package com.xuexi;

import java.util.HashSet;

public class Demo4 {
    public static void main(String[] args) {
        //创建HashSet集合对象
        HashSet<Stuudent> hs = new HashSet<Stuudent>();

        //创建学生对象
        Stuudent s1 = new Stuudent("Tom",5);
        Stuudent s2 = new Stuudent("Bob",6);
        Stuudent s3 = new Stuudent("Amy",6);

        Stuudent s4 = new Stuudent("Tom",5);

        //把学生添加到集合
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
        hs.add(s4);

        //遍历
        for (Stuudent s : hs){
            System.out.println(s.getName()+','+s.getAge());
        }
    }
}

运行结果:

Tom,5
Amy,6
Bob,6
  1. 案例:成绩排序
    需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合。
    要求:按照总分从高到低出现。
    分析:
    (1)定义学生类;
    (2)创建TreeSet集合对象,通过比较器排序进行排序;
    (3)创建学生对象;
    (4)把学生对象添加到集合;
    (5)遍历集合。
    完整代码:
package com.xuexi;

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;
        Chinese = chinese;
        this.math = math;
    }


    public int getChinese() {
        return Chinese;
    }

    public void setChinese(int chinese) {
        Chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public String getName() {
        return name;
    }

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

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

package com.xuexi;

import java.util.Comparator;
import java.util.TreeSet;

public class Demo9 {
    public static void main(String[] args) {
        //创建TreeSet集合对象,通过比较器进行排序
        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student 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;
            }
        });

        //创建学生对象
        Student s1 = new Student("Tom",98,99);
        Student s2 = new Student("Tim",96,93);
        Student s3 = new Student("Bob",85,99);
        Student s4 = new Student("Jerry",97,99);
        Student s5 = new Student("Amy",98,96);

        Student s6 = new Student("Tia",95,99);//总分相同
        Student s7 = new Student("wwww",98,99);


        //把学生添加到集合
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        ts.add(s7);

        //遍历集合
        for (Student s : ts){
            System.out.println(s.getName()+','+s.getChinese()+','+s.getMath()+','+s.getSum());
        }


    }
}

运行结果:

Tom,98,99,197
wwww,98,99,197
Jerry,97,99,196
Tia,95,99,194
Amy,98,96,194
Tim,96,93,189
Bob,85,99,184
  1. 案例:不重复的随机数
    需求:编写一个程序,获取10个1~20之间的随机数,要求随机数不能重复,并在控制台输出。
    分析:
    (1)创建Set集合对象;
    (2)创建随机数对象;
    (3)判断集合的长度是不是小于10,
    是:产生一个随机数,添加到集合
    回到(3)继续;
    (4)遍历集合。
    完整代码:
package com.xuexi;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Demo10 {
    public static void main(String[] args) {
        //创建Set集合对象
//        Set<Integer> set = new HashSet<Integer>();//无序
        Set<Integer> set = new TreeSet<Integer>();//排序
        //创建随机数对象
        Random r = new Random();

        //判断集合的长度是不是小于10
        while (set.size()<10){
            //产生一个随机数,添加到集合
            int num = r.nextInt(20) + 1;//+1去除0
            set.add(num);
        }

        //遍历集合
        for (Integer i : set){
            System.out.println(i);
        }
    }
}

运行结果:

2
4
6
7
8
10
11
12
14
18

Process finished with exit code 0

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值