ArrayList中有一个方法:Contains用来判断是否有重复的元素

    boolean Contains(Object o) - 判断集合中是否有指定的元素

    为了实现这个功能,我们需要新建一个实体类,是Object的子类,具备了equals方法
    Contains方法会调用参数的equals方法

    equals方法默认的比较对象的方式是比较地址值,也就是 ==
    **
    重写equals方法的目的是为了比较两个对象像不像

    1. /**
    2. *ArrayList中有一个方法:contains用来判断是否有重复的元素
    3. */
    4. package Test18_Demo.Demo07;/*
    5. @create 2020--12--08--14:19
    6. */
    7. import java.util.ArrayList;
    8. public class ArrayListContainsDemo {
    9. public static void main(String[] args) {
    10. //创建集合
    11. ArrayList<String> list = new ArrayList<>();
    12. //添加元素
    13. list.add("Jack");
    14. list.add("Tom");
    15. list.add("Lucy");
    16. //判断 - 大小写敏感
    17. System.out.println(list.contains("Jack"));
    18. System.out.println("===============");
    19. //对象比较
    20. ArrayList<Person> list2 = new ArrayList<>();
    21. list2.add(new Person("宋远桥",45));
    22. list2.add(new Person("俞莲舟",40));
    23. list2.add(new Person("张翠山",32));
    24. //equals方法默认的比较对象的方式是比较地址值,也就是 ==
    25. System.out.println(list2.contains(new Person("宋远桥", 45)));//true
    26. System.out.println(list2.contains(new Person("宋远桥1", 45)));//false - 比较的是地址值
    27. }
    28. }
    1. package Test18_Demo.Demo07;/*
    2. @create 2020--12--08--14:23
    3. */
    4. import javax.naming.PartialResultException;
    5. import java.util.Objects;
    6. public class Person {
    7. private String name;
    8. private int age;
    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. // //重写equals方法
    35. // @Override
    36. // public boolean equals(Object object) {
    37. // //直接拿到父类中的equals方法
    38. //// System.out.println("equals方法被调用了");
    39. //
    40. // //this:表示contains方法的参数
    41. // //object:集合中原有的对象
    42. // //将Object类型的object强制转换了子类型
    43. // Person otherP = (Person) object;
    44. //
    45. // //重写比较规则
    46. // //比较的是当前的对象的属性:名字,年龄
    47. // if (!this.getName().equals(otherP.getName())) {
    48. // return false;
    49. // }
    50. // if (this.getAge() == otherP.getAge()) {
    51. // return false;
    52. // }
    53. // //如果上面两个都不是false,则返回true
    54. //
    55. // return true;
    56. // }
    57. @Override
    58. public boolean equals(Object o) {
    59. if (this == o) return true;
    60. if (o == null || getClass() != o.getClass()) return false;
    61. Person person = (Person) o;
    62. return age == person.age &&
    63. Objects.equals(name, person.name);
    64. }
    65. @Override
    66. public int hashCode() {
    67. return Objects.hash(name, age);
    68. }
    69. }

    image.png