天天看点

Java集合框架——Set集合案例实操

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