HashSet集合中,添加元素的方法在执行添加的时候会判断元素是否已经存在

    HashSet判断元素唯一性的规则:

    1. 把对象加入到HashSet 的时候,会先使用对象的HashCode方法来生成一个哈希值,来判断对象加入的位置
    2. 如果比较的位置没有其他对象存在,则判断元素不同,可以加入新的对象
    3. 如果比较的位置有其他对象存在,接着比较HashCode值和equals比较结果

    返回true则相同,不能存入新的对象,如果是false则不同,添加新的对象

    1. /**
    2. * 需求:
    3. * 我们要求比较两个对象的属性和内容是否相同,而非比较对象的地址值
    4. * 此时我们可以重写Person
    5. */
    6. package Test18_Demo.Demo09;/*
    7. @create 2020--12--08--15:07
    8. */
    9. import java.util.HashSet;
    10. public class HashSetAddDemo {
    11. public static void main(String[] args) {
    12. HashSet<Person> hashSet = new HashSet<>();
    13. //创建对象
    14. Person person1 = new Person("张三丰", 120);
    15. Person person2 = new Person("郭襄", 100);
    16. Person person3 = new Person("杨过", 100);
    17. //添加到集合中
    18. hashSet.add(person1);
    19. hashSet.add(person2);
    20. hashSet.add(person3);
    21. //System.out.println(hashSet);
    22. //再次调用add方法添加新的元素 - 可以添加
    23. hashSet.add(new Person("郭襄", 100));
    24. System.out.println(hashSet);
    25. }
    26. }
    1. package Test18_Demo.Demo09;/*
    2. @create 2020--12--08--14:23
    3. */
    4. import java.util.Objects;
    5. public class Person {
    6. private String name;
    7. private int age;
    8. private Object o;
    9. public Person() {
    10. }
    11. public Person(String name, int age) {
    12. this.name = name;
    13. this.age = age;
    14. }
    15. public String getName() {
    16. return name;
    17. }
    18. public void setName(String name) {
    19. this.name = name;
    20. }
    21. public int getAge() {
    22. return age;
    23. }
    24. public void setAge(int age) {
    25. this.age = age;
    26. }
    27. @Override
    28. public String toString() {
    29. return "Person{" +
    30. "name='" + name + '\'' +
    31. ", age=" + age +
    32. '}';
    33. }
    34. @Override
    35. public boolean equals(Object o1) {
    36. if (this == o1) return true;
    37. if (o1 == null || getClass() != o1.getClass()) return false;
    38. Person person = (Person) o1;
    39. return age == person.age &&
    40. Objects.equals(name, person.name) &&
    41. Objects.equals(o, person.o);
    42. }
    43. @Override
    44. public int hashCode() {
    45. return Objects.hash(name, age, o);
    46. }
    47. }