HashSet集合中,添加元素的方法在执行添加的时候会判断元素是否已经存在
HashSet判断元素唯一性的规则:
- 把对象加入到HashSet 的时候,会先使用对象的HashCode方法来生成一个哈希值,来判断对象加入的位置
- 如果比较的位置没有其他对象存在,则判断元素不同,可以加入新的对象
- 如果比较的位置有其他对象存在,接着比较HashCode值和equals比较结果
返回true则相同,不能存入新的对象,如果是false则不同,添加新的对象
/**
* 需求:
* 我们要求比较两个对象的属性和内容是否相同,而非比较对象的地址值
* 此时我们可以重写Person
*/
package Test18_Demo.Demo09;/*
@create 2020--12--08--15:07
*/
import java.util.HashSet;
public class HashSetAddDemo {
public static void main(String[] args) {
HashSet<Person> hashSet = new HashSet<>();
//创建对象
Person person1 = new Person("张三丰", 120);
Person person2 = new Person("郭襄", 100);
Person person3 = new Person("杨过", 100);
//添加到集合中
hashSet.add(person1);
hashSet.add(person2);
hashSet.add(person3);
//System.out.println(hashSet);
//再次调用add方法添加新的元素 - 可以添加
hashSet.add(new Person("郭襄", 100));
System.out.println(hashSet);
}
}
package Test18_Demo.Demo09;/*
@create 2020--12--08--14:23
*/
import java.util.Objects;
public class Person {
private String name;
private int age;
private Object o;
public Person() {
}
public Person(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 String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o1) {
if (this == o1) return true;
if (o1 == null || getClass() != o1.getClass()) return false;
Person person = (Person) o1;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(o, person.o);
}
@Override
public int hashCode() {
return Objects.hash(name, age, o);
}
}