集合(18):Set集合练习

集合(18):Set集合练习

1、TreeSet集合存储自定义对象并遍历

需求: 如果对象的成员变量值相同即为同一个对象,按照年龄进行从大到小进行排序

//定义学生类
public class Student2 {
    private String name;
    private int age;

    public Student2() {
    }

    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
//定义测试类
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo4 {
    public static void main(String[] args) {
        //直接使用构造方法传参,重写compare方法(匿名内部类)
        TreeSet<Student2> student2s = new TreeSet<Student2>(new Comparator<Student2>() {
            @Override
            public int compare(Student2 o1, Student2 o2) {
                // 按照年龄进行从大到小进行排序
                int i = o2.getAge() - o1.getAge();

                //比较隐含条件,年龄一样,姓名不一定一样
                int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;

                return i2;
            }
        });

        //创建学生对象
        Student2 s1 = new Student2("小朱", 18);
        Student2 s2 = new Student2("小刘", 18);
        Student2 s3 = new Student2("小龙", 16);
        Student2 s4 = new Student2("小可爱", 19);

        //将学生对象添加到集合中
        student2s.add(s1);
        student2s.add(s2);
        student2s.add(s3);
        student2s.add(s4);

        for(Student2 s : student2s){
            System.out.println(s);
        }
    }
}
            执行结果如下:
                        Student{name='小可爱', age=19}
                        Student{name='小刘', age=18}
                        Student{name='小朱', age=18}
                        Student{name='小龙', age=16}

                        Process finished with exit code 0

2、编写一个程序,获取10个1至20的随机数,要求随机数不能重复

import java.util.Random;
import java.util.TreeSet;

public class TreeSetDemo5 {
    public static void main(String[] args) {
        //创建随机数对象
        Random random = new Random();

        TreeSet<Integer> integers = new TreeSet<>();

        while (true){
            if(integers.size()==10){
                break;
            }
            //生成随机数
            int number = random.nextInt(20) + 1;
            integers.add(number);
        }

        System.out.println(integers);
    }
}
            执行结果如下:
                        [3, 8, 9, 12, 14, 15, 16, 17, 18, 20]

                        Process finished with exit code 0

3、键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台

//定义学生类
public class Student3 {
    private String name;
    //学科
    private int chinese;
    private int math;
    private int english;

    public Student3() {
    }

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

    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 getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    //定义一个求总分数的方法
    public int getSum(){
        return chinese + math + english;
    }

    @Override
    public String toString() {
        return "Student3{" +
                "name='" + name + '\'' +
                ", chinese=" + chinese +
                ", math=" + math +
                ", english=" + english +
                '}';
    }
}
//测试类
import java.util.Comparator;
import java.util.TreeSet;

/*
    键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),
    按照总分从高到低输出到控制台,假设班级没有重名的
 */
import java.util.Scanner;//键盘录入导包

public class TreeSetDemo6 {
    public static void main(String[] args) {
        //创建一个TreeSet集合对象,匿名内部类的形式实现Comparator接口
        TreeSet<Student3> ts = new TreeSet<>(new Comparator<Student3>() {
            @Override
            public int compare(Student3 o1, Student3 o2) {
                //按照总分从高到低
                int i = o2.getSum() - o1.getSum();
                //总分一样,语文成绩不一定一样
                int i2 = i == 0 ? o1.getChinese() - o2.getChinese() : i;
                //总分一样,语文成绩一样,数学成绩不一定一样
                int i3 = i2 == 0 ? o1.getMath() - o2.getMath() : i2;
                //总分一样,语文成绩一样,数学成绩一样,英语成绩不一定一样
                int i4 = i3 == 0 ? o1.getEnglish() - o2.getEnglish() : i3;
                //总分一样,语文成绩一样,数学成绩一样,英语成绩一样,姓名不一定一样
                int i5 = i4 == 0 ? o1.getName().compareTo(o2.getName()) : i4;
                return i5;
            }
        });

        //创建Scanner对象
        Scanner sc = new Scanner(System.in);

        for (int i = 1; i < 6; i++) {
            System.out.println("请输入第" + i + "个学生的姓名:");
            String name = sc.next();
            System.out.println("请输入" + name + "的语文成绩:");
            int chinese = sc.nextInt();
            System.out.println("请输入" + name + "的数学成绩:");
            int math = sc.nextInt();
            System.out.println("请输入" + name + "的英语成绩:");
            int english = sc.nextInt();

            //创建学生对象,将输入的值赋给学生对象的成员变量
            Student3 s = new Student3(name,chinese,math,english);
            /*
            也可以这样:
            	Student3 student = new Student3();
            	student.setName(name);
            	student.setChinese(chinese);
           		student.setMath(math);
            	student.setEnglish(english);
            */

            //将学生对象添加到集合中
            ts.add(s);
			//加个判断
            if (i == 5) {
                System.out.println("所有的学生信息录入完毕!");
            }
        }

        System.out.println("===========================================");
        
        //遍历学生信息
        for (Student3 student3 : ts) {
            System.out.println(student3.getName() + "\t" + student3.getChinese() + "\t"
                    + student3.getMath() + "\t" + student3.getEnglish() + "\t" + student3.getSum());
        }
    }
}

执行结果如下:

请输入第1个学生的姓名:
李玉伟
请输入李玉伟的语文成绩:
88
请输入李玉伟的数学成绩:
95
请输入李玉伟的英语成绩:
85
请输入第2个学生的姓名:
张三
请输入张三的语文成绩:
60
请输入张三的数学成绩:
99
请输入张三的英语成绩:
73
请输入第3个学生的姓名:
李四
请输入李四的语文成绩:
88
请输入李四的数学成绩:
99
请输入李四的英语成绩:
35
请输入第4个学生的姓名:
王二
请输入王二的语文成绩:
58
请输入王二的数学成绩:
46
请输入王二的英语成绩:
73
请输入第5个学生的姓名:
麻子
请输入麻子的语文成绩:
72
请输入麻子的数学成绩:
73
请输入麻子的英语成绩:
36
所有的学生信息录入完毕!
===========================================
王二	58	466	73	597
李玉伟	88	95	85	268
张三	60	99	73	232
李四	88	99	35	222
麻子	72	73	36	181

Process finished with exit code 0
posted @ 2021-12-30 17:04  阿伟宝座  阅读(128)  评论(0)    收藏  举报