HashSet 是 哈希集合的意思
    image.png
    image.png
    Set集合去重复案例:
    image.png
    重写HashCode和equals ( 这里要重写equals的原因:因为默认比较其对象地址,要重写,才能打印其内容)
    image.png

    1. package com.itheima.d1_set;
    2. import java.util.HashSet;
    3. import java.util.Set;
    4. /**
    5. * 目标: 让Set集合把重复内容的对象去掉一个(去重复)
    6. */
    7. public class SetDemo3 {
    8. public static void main(String[] args) {
    9. // 创建哈希集合(HashSet)
    10. // Set集合去重复原因:先判断哈希值 再判断equals
    11. Set<Student> sets = new HashSet<>();
    12. Student s1 = new Student("无恙",20,'男');
    13. Student s2 = new Student("无恙",20,'男');
    14. Student s3 = new Student("周雄",20,'男');
    15. sets.add(s1);
    16. sets.add(s2);
    17. sets.add(s3);
    18. // 直接输出存储Student类对象不会去重,因为每次创建的对象哈希值都不一样
    19. System.out.println(sets); //[Student{name='无恙', age=20, sex=男}, Student{name='周雄', age=20, sex=男}]
    20. // 重写了equals和HashCode方法,会去重复
    21. }
    22. }
    1. package com.itheima.d1_set;
    2. import java.util.Objects;
    3. public class Student {
    4. private String name;
    5. private int age;
    6. private char sex;
    7. public Student() {
    8. }
    9. public Student(String name, int age, char sex) {
    10. this.name = name;
    11. this.age = age;
    12. this.sex = sex;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public int getAge() {
    21. return age;
    22. }
    23. public void setAge(int age) {
    24. this.age = age;
    25. }
    26. public char getSex() {
    27. return sex;
    28. }
    29. public void setSex(char sex) {
    30. this.sex = sex;
    31. }
    32. // 重写toString方法,可以直接打印内容
    33. @Override
    34. public String toString() {
    35. return "Student{" +
    36. "name='" + name + '\'' +
    37. ", age=" + age +
    38. ", sex=" + sex +
    39. '}';
    40. }
    41. // 重写HashCode和equals
    42. // 右键一直next即可
    43. @Override
    44. public boolean equals(Object o) {
    45. if (this == o) return true;
    46. if (o == null || getClass() != o.getClass()) return false;
    47. Student student = (Student) o;
    48. // 如果内容不一样返回其内容
    49. return age == student.age && sex == student.sex && Objects.equals(name, student.name);
    50. }
    51. @Override
    52. public int hashCode() {
    53. // 保证入参一样,返回的哈希值一定是一样的
    54. return Objects.hash(name, age, sex);
    55. }
    56. }