Set集合中去除重复插入的对象
1.先创建一个Student类,并在Student类中添加有参构造、无参构造和get、set方法。
重要:在Student类中重写hashCode和equals方法(必须)
package lesson1;
public class Student {
int sno;
String name;
int age;
double score;
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
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;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int sno, String name, int age, double score) {
super();
this.sno = sno;
this.name = name;
this.age = age;
this.score = score;
}
/**
* 重写hashCode()方法,如果sno(学号)相同
* 则返回相同的hashCode值
*/
@Override
public int hashCode() {
Integer ino = sno;
return ino.hashCode();
}
/**
* 重写equals方法,如果有相同的sno(学号)
* 则返回true
*/
@Override
public boolean equals(Object obj) {
Student stu = (Student) obj;
return this.getSno() == stu.getSno();
}
}
2.创建一个测试类SetTest,进行测试。
package lesson1;
import java.util.HashSet;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//通过student类的有参构造创造四个student对象
Student s1 = new Student(100 , "zhang3" , 20 , 99);
Student s2 = new Student(100 , "zhang3" , 20 , 99);
Student s3 = new Student(101 , "li4" , 22 , 90);
Student s4 = new Student(102 , "wang5" , 24 , 79);
Student s5 = new Student(101 , "li4" , 22 , 90);
//创建一个Set集合
Set<Student> stu_set = new HashSet<Student>();
//将四个student对象添加到集合中
//在调用add方法的时候会自动调用Student类中重写的
//hashCode方法和equals方法,如果添加时
//hashCode值相同且equals方法返回为true则不添加该对象
stu_set.add(s1);
stu_set.add(s2);
stu_set.add(s3);
stu_set.add(s4);
stu_set.add(s5);
//通过增强for循环输出集合中的对象
for (Student s:stu_set) {
System.out.println("学号:" + s.getSno() + " 姓名:" + s.getName()
+ " 年龄:" + s.getAge() + " 成绩:" + s.getScore() );
}
}
}
测试结果:
由上面的结果可以发现,插入的对象数据有两条是重复的,Set集合在使用添加方法add的时候把重复的对象给去掉了。