Set集合案例实操
练习一:编写一个程序,获取10个1至10之间的随机数,要求随机数不能重复
- 分析:
- ①创建HashSet集合,用于存储随机生成的数字
- ② 创建随机生成数对象(Random → nextInt())
- ③ 把随机生成的数字添加到HashSet集合中
package com.set.demo3;
import java.util.HashSet;
import java.util.Random;
public class RandomHashSetTest {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<Integer>();
Random rd = new Random();
int count = 0;
while(set.size() < 10) {
int num = rd.nextInt(10)+1;
set.add(num);
count++;
}
System.out.println("循环次数: " + count);
System.out.println("------------");
for (Integer nums : set) {
System.out.println(nums);
}
}
}
- 执行结果:
循环次数: 23 (循环次数会随随机数生成的不同而改变)
------------
1
2
3
4
5
6
7
8
9
10
练习二:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出
- 分析:
- ① 创建学生类(姓名,语文成绩,数学成绩,英语成绩,总分)
- ② 创建TreeSet集合,用来存储学生对象
- ③ 录入学生信息
- ④ 创建学生对象的比较器
- ⑤ 把学生对象添加到TreeSet集合中
- ⑥ 遍历集合
//Student.java
package com.set.demo3;
public class Student{
private String name;
private int chinese;
private int maths;
private int english;
public Student() {
super();
}
public Student(String name, int chinese, int maths, int english) {
super();
this.name = name;
this.chinese = chinese;
this.maths = maths;
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 getMaths() {
return maths;
}
public void setMaths(int maths) {
this.maths = maths;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getSum() {
return chinese + maths + english;
}
}
//StudentCompare.java
package com.set.demo3;
import java.util.Comparator;
public class StudentCompare implements Comparator<Student> {
// 满足同一对象的条件:姓名、总分、语文成绩、数学成绩、英语成绩都相同
@Override
public int compare(Student s1, Student s2) {
//主要条件:总分
int sum1 = s2.getSum() - s1.getSum();
//次要条件①:总分+语文成绩
int sum2 = sum1==0 ? s2.getChinese()-s1.getChinese() : sum1;
//次要条件②:总分+语文成绩+数学成绩
int sum3 = sum2==0 ? s2.getMaths()-s1.getMaths() : sum2;
//次要条件③:总分+语文成绩+数学成绩+英语成绩
int sum4 = sum3==0 ? s2.getEnglish()-s1.getEnglish() : sum3;
//次要条件④:总分+语文成绩+数学成绩+英语成绩+姓名
int sum5 = sum4==0 ? s2.getName().compareTo(s1.getName()) : sum4;
return sum5;
}
}
//StudentTreeSetTest.java
package com.set.demo3;
import java.util.Scanner;
import java.util.TreeSet;
public class StudentTreeSetTest {
public static void main(String[] args) {
TreeSet<Student> set = new TreeSet<Student>(new StudentCompare());
Scanner scan = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
Student s = new Student();
System.out.println("姓名: ");
String name = scan.nextLine();
System.out.println("语文成绩: ");
String chinese = scan.nextLine();
System.out.println("数学成绩: ");
String maths = scan.nextLine();
System.out.println("英语成绩: ");
String english = scan.nextLine();
s.setName(name);
s.setChinese(Integer.parseInt(chinese));
s.setMaths(Integer.parseInt(maths));
s.setEnglish(Integer.parseInt(english));
set.add(s);
}
for (Student stus : set) {
System.out.println("姓名: " + stus.getName() + " 总分: " + stus.getSum());
}
}
}
- 输入与执行结果:
姓名:
张三
语文成绩:
100
数学成绩:
140
英语成绩:
120
姓名:
李四
语文成绩:
150
数学成绩:
90
英语成绩:
120
姓名:
王五
语文成绩:
100
数学成绩:
100
英语成绩:
100
姓名: 李四 总分: 360
姓名: 张三 总分: 360
姓名: 王五 总分: 300