HashSet集合存储学生对象并遍历
需求:创建一个存储学生对象的集合,存储多个学生对象,实用程序实现在控制台遍历该集合
要求:学生对象的成员变量值相同,我们就认为是同一个对象
思路:
1.定义学生类
2.创建HashSet集合对象
3.创建学生对象
4.把学生添加到集合
5.遍历集合,使用增强for循环的方式
6.在学生类中重写两个方法hashCode()和equals()
学生类:
package com.gather.set.example;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(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 boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
}
测试类:
package com.gather.set.example;
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<Student>();
Student s1 = new Student("郝佳乐", 20);
Student s2 = new Student("张三", 18);
Student s3 = new Student("李四", 22);
Student s4 = new Student("李四", 22);
//把学生添加到集合
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4);
//遍历
for (Student s : hs) {
System.out.println(s.getName() + "," + s.getAge());
}
}
}
在测试类中添加了两个成员变量值相同的学生,控制台输出时只输出了一个,因为为了保证元素的唯一性,在学生类中重写了hashCode()和equals()方法,如果不重写方法,就会输出两个“李四”,22的结果