Day07_37_深度剖析集合中的contains()方法

深度剖析集合中的 contains()方法

  • contains()方法查找集合中是否包含某个元素

    • contains() 底层使用的是 equals()方法

    • 当contains()方法拿到一个对象的时候,会循环和当前集合中的元素的值进行比较,如果没有相等的那么返回false,有相等的则返回true

    • 返回true/false的关键还在于,是否重写了equals()方法,如果重写了equals()方法那么就会做值比较,如果没有重写那么就是对象地址比较。

  • 代码对比解析

      package com.shige.Collection;
    
      import java.util.ArrayList;
      import java.util.Collection;
      import java.util.Objects;
    
      public class CollectionMethod02 {
          public static void main(String[] args) {
    
              // 创建Collection集合
              Collection collection=new ArrayList(); // 父类引用指向子类对象、
    
              // 创建对象
               Integer integer=new Integer(100);
    
              // 向集合中添加元素
              collection.add(integer);
    
              //使用contains()方法查找集合中是否包含该元素
              if(collection.contains(integer)){
                  System.out.println("包含");
              }else{
                  System.out.println("不包含");
              }
    
    
              //再创建一个对象
              Integer integer1=new Integer(100);
    
              //在没有把integer1加入到集合中的情况下,再次调用contains()方法
    
              if(collection.contains(integer1)){
                  System.out.println("包含");   // 包含
              }else{
                  System.out.println("不包含");
              }
           // 为什么在没有把integer1加入到集合中的情况下,结果确是包含的呢? 因为contains()方法底层使用的是equals()方法,而Integer重写了equales()方法,只做了值的比较,所以包含。
              //当contains()方法拿到一个对象的时候,会循环和当前集合中的元素的值进行比较,如果没有相等的那么返回false,有相等的则返回true
    
              //再次创建对象
              Manager manager=new Manager("张三",56);
              Manager manager1=new Manager("张三",56);
    
              //添加对象到集合中
              collection.add(manager);
    
              //调用contains()方法
              System.out.println(collection.contains(manager)); //true
              System.out.println(collection.contains(manager1)); //false
    
              // 这里两个相等的数据为什么不包含了呢? 因为这里的Manager类没有重写equals()方法,比较的是两个对象的地址。
    
    
    
              //使用remove()方法删除集合中的指定元素
              collection.remove(integer);
              System.out.println(integer);
          }
      }
    
      class Manager{
    
            //属性
             String  name;
             int age;
    
           // 构造方法
          Manager(){}
          Manager(String name,int age){
              this.name=name;
              this.age=age;
          }
    
          // 重写equals
          @Override
          public boolean equals(Object o) {
              if (this == o) return true;
              if (o == null || getClass() != o.getClass()) return false;
              Manager manager = (Manager) o;
              return age == manager.age &&
                      Objects.equals(name, manager.name);
          }
    
          @Override
          public int hashCode() {
              return Objects.hash(name, age);
          }
      }
上一篇:Django 搜索功能


下一篇:contains