集合(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

浙公网安备 33010602011771号