深度剖析集合中的 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. 第47天学习打卡(HTML)

    什么是HTML HTML Hyper Text Markup Language(超文本标记语言) 超文本包括:文字,图片,音频,视频,动画等 HTML5,提供了一些新的元素和一些有趣的新特性,同时也建 ...

  2. E: Some index files failed to download. They have been**

    转: E: Some index files failed to download. They have been** 问题描述: 当使用Dockerfile从包含cuda的镜像建立新的image的时 ...

  3. PAT-1043(Is It a Binary Search Tree)JAVA实现

    Is It a Binary Search Tree PAT-1043 主要涉及到根据前序遍历序列片段是否是一颗二叉树,这里有一个小tip就是插入序列就是二叉树的前序遍历序列. 第二个是会对排序二叉树 ...

  4. 面试准备——计算机网络(https)

    一.为什么要提出HTTPS? HTTP的缺点: 明文通信.不加密,可能被窃听. 无身份验证,可能遭遇伪装. 无法证明报文的完整性,可能被篡改. 二.HTTPS = HTTP+加密(防窃听)+认证(防伪 ...

  5. Java8 BiFunction 简单用用

    最近来了新公司,主要用到了ElasitcSearch,大家都知道在底层查询代码中往往需要判断传入某个参数是否为空来判断设置查询,例如下方代码: BoolQueryBuilder query = Que ...

  6. LNMP配置——Nginx配置 —— 默认虚拟主机

    一.配置 首先修改配置文件 #vi /usr/local/nginx/conf/nginx.conf 在最后一个结束符号}前加一行配置: include vhost/*.conf; 意思就是/usr/ ...

  7. js toFixed

    为什么(2.55).toFixed(1)等于2.5? 上次遇到了一个奇怪的问题:JS的(2.55).toFixed(1)输出是2.5,而不是四舍五入的2.6,这是为什么呢? 进一步观察: 发现,并不是 ...

  8. 史上超强拷贝仓——GitHub 热点速览 v.21.11

    作者:HelloGitHub-小鱼干 Clone-Wars 是真的强,能细数 70+ 知名应用网站的源码,即便你不看代码,也可以了解下各大网站的所用技术栈.同样很强的是用 OpenCV 实现的图片转 ...

  9. P1060_开心的金明(JAVA语言)

    思路 0/1背包问题 模板 //暴力出奇迹 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些 ...

  10. golang 性能优化分析:benchmark 结合 pprof

    前面 2 篇 golang 性能优化分析系列文章: golang 性能优化分析工具 pprof (上) golang 性能优化分析工具 pprof (下) 一.基准测试 benchmark 简介 在 ...