HashSet存储自定义对象并遍历
package com.itheima_01;
import java.util.HashSet;
/*
* 使用HashSet存储自定义对象并遍历
*/
public class HashSetDemo2 {
public static void main(String[] args) {
//创建集合对象
HashSet<Student> hs = new HashSet<Student>();
//创建元素对象
Student s = new Student("zhangsan",18);
//本来是Set的存储特点是无序的但是此时会控制台上打印的结果会出现两个lisi,20
Student s2 = new Student("lisi",20);
Student s3 = new Student("lisi",20);
//添加元素对象
hs.add(s);
hs.add(s2);
hs.add(s3);
//遍历集合对象
for (Student student : hs) {
System.out.println(student);
}
}
}
class Student {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
HashSet唯一性原理
- 规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较
- 首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值)
- 如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合
- 如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较
- 如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合
- 如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合