深度剖析集合中的 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);
    }
    }

Day07_37_深度剖析集合中的contains()方法的更多相关文章

  1. 深度剖析java中JDK动态代理机制

    https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...

  2. Day07_39_集合中的remove()方法 与 迭代器中的remove()方法

    集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...

  3. Day07_38_集合中的remove()方法

    集合中的remove()方法 remove() 移除集合中的一个指定对象 代码实例 package com.shige.Collection; import java.util.ArrayList; ...

  4. 删除List集合中的元素方法

    List集合是我们平时使用的最多的集合了,一般用来存放从数据库中查询的对象数据,但有时我们会从中筛选不需要的数据,第一次使用这种方式: 使用增强for循环遍历,使用list的remove方法删除不符合 ...

  5. Java Collection集合中的iterator方法

    Iterator接口的概述 /** * java.util.Iterator接口:选代器(对集合进行遍历) * 有两个常用的方法 * boolean hasNext() * 如果仍有元素可以迭代,则返 ...

  6. 00031_ArrayList集合中常用的方法

    1.ArrayList集合提供的一些常用方法 import java.util.ArrayList; public class ArrayListDemo01 { public static void ...

  7. 20、List集合中特有的方法

    List里面的特有方法简介 List中除了Collection里面的方法以外,内部还有一些方法,通过这些方法,开发者可以更方便的操作List接口的实现类. package com.monkey1024 ...

  8. C#实现在foreach遍历中删除集合中的元素(方法总结)

    目录 方法一:采用for循环,并且从尾到头遍历 方法二:使用递归 方法三:通过泛型类实现IEnumerator 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致 ...

  9. 深度剖析Vue中父给子、子给父、兄弟之间传值!

    本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...

随机推荐

  1. linux系统的认识

    当使用其他工具连接linux系统时的常用命令. 连接:ssh 用户名@ip 进入根目录:cd /            (一般都是先进入根目录然后才能进入其他文件夹) 进入其他文件夹:cd /home ...

  2. Django框架的forms组件与一些补充

    目录 一.多对多的三种创建方式 1. 全自动 2. 纯手撸(了解) 3. 半自动(强烈推荐) 二.forms组件 1. 如何使用forms组件 2. 使用forms组件校验数据 3. 使用forms组 ...

  3. 创建AD域之后设置DNS服务访问外网

    AD域内需要有DNS服务器,用于解析域内的计算机名,域内的计算解析公网的域名需要设置一个转发器(Forwarder). 一定要设置好自己的默认网关.DNS因为部署在AD服务器上,直接loopback地 ...

  4. 从客流统计到营销赋能,Re-ID加速实体商业数字化转型 | 爱分析洞见

    2020年中国实体商业受到突发疫情的重大影响.以危机为契机,实体商业加速数字化转型,利用创新应用服务自身业务.在此阶段,基于Re-ID(Person Re-identification,即行人再识别) ...

  5. C语言中字符串详解

    C语言中字符串详解 字符串时是C语言中非常重要的部分,我们从字符串的性质和字符串的创建.程序中字符串的输入输出和字符串的操作来对字符串进行详细的解析. 什么是字符串? C语言本身没有内置的字符串类型, ...

  6. 从代理模式 到 SpringAOP

    前言 Spring AOP 就是通过代理模式来实现切面编程的.代理模式用来为其他对象提供一种代理,以控制对这个对象的访问. 代理对象在客户端和目标对象之间起到中介的作用.通过控制对这个对象的访问,可以 ...

  7. react+lib-flexible适配浏览器宽度配置

    p.p1 { margin: 0; font: 12px "Helvetica Neue" } p.p2 { margin: 0; font: 12px "Helveti ...

  8. innerHTML,innerText

    文本替换 <p id="p1">Hello World!</p><div>神经</div><h3 class="hh ...

  9. C语言入门--初来乍到

    Hi,我是fish-studio,这是我写的第一篇博客,接下来我会以萌新的角度来与大家一起学习C语言,我也不是什么大佬,在我写的教程中会尽量详细的把我遇到的问题写出来,也会结合一些网上的文章进行编写, ...

  10. vim下在插件emmet

    试了很多种方法,结果都没有用,最后找到了完美的解决方法! 1.方式1 1.1下载emmet并解压 1.2 cd /home/debian8/Downloads/emmet-vim-master/plu ...