- 案例: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
- 案例:成绩排序
需求:用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
- 案例:不重复的随机数
需求:编写一个程序,获取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