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);
}
}
Day07_37_深度剖析集合中的contains()方法的更多相关文章
- 深度剖析java中JDK动态代理机制
https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...
- Day07_39_集合中的remove()方法 与 迭代器中的remove()方法
集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...
- Day07_38_集合中的remove()方法
集合中的remove()方法 remove() 移除集合中的一个指定对象 代码实例 package com.shige.Collection; import java.util.ArrayList; ...
- 删除List集合中的元素方法
List集合是我们平时使用的最多的集合了,一般用来存放从数据库中查询的对象数据,但有时我们会从中筛选不需要的数据,第一次使用这种方式: 使用增强for循环遍历,使用list的remove方法删除不符合 ...
- Java Collection集合中的iterator方法
Iterator接口的概述 /** * java.util.Iterator接口:选代器(对集合进行遍历) * 有两个常用的方法 * boolean hasNext() * 如果仍有元素可以迭代,则返 ...
- 00031_ArrayList集合中常用的方法
1.ArrayList集合提供的一些常用方法 import java.util.ArrayList; public class ArrayListDemo01 { public static void ...
- 20、List集合中特有的方法
List里面的特有方法简介 List中除了Collection里面的方法以外,内部还有一些方法,通过这些方法,开发者可以更方便的操作List接口的实现类. package com.monkey1024 ...
- C#实现在foreach遍历中删除集合中的元素(方法总结)
目录 方法一:采用for循环,并且从尾到头遍历 方法二:使用递归 方法三:通过泛型类实现IEnumerator 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致 ...
- 深度剖析Vue中父给子、子给父、兄弟之间传值!
本片文章将为您详细讲解在Vue中,父给子传值.子给父传值以及兄弟之间传值方式! 父传子:父组件 // template里面 <aa :info="name"/> // ...
随机推荐
- oracle之用户
命令都是在命令行窗口执行 创建用户 1)登陆管理员用户 sqlplus system/密码 sqlplus system/briup 注意不要以分号结尾 2)创建用户 create user 用户名 ...
- 生产者和消费者问题(synchronized、Lock)
1.synchronized的生产者和消费者 synchronized是锁住对象 this.wait()释放了锁 并等待 this.notify()随机通知并唤醒同一个对象中的一个线程 this.no ...
- zabbix Python3管理
import requests import json import os # user config here ip = '192.168.52.130' user = "root&quo ...
- MySQL注入与informantion_schema库
目录 只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_schema), ...
- HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别?
HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别? 在解决问题前,需要连接到,路由器的WAN口和LAN口的作用不同. WAN口是对外的接口,连接广域网.当联网设备和路由器都开启了D ...
- AOP面试造火箭始末
本文已整理致我的github地址,欢迎大家 star 支持一下 这是一个困扰我司由来已久的难题,Dubbo 了解过吧,对外提供的服务可能有多个方法,一般我们为了不给调用方埋坑,会在每个方法里把所有异常 ...
- pytorch(03)tensor的操作
张量操作 一.张量的拼接 torch.cat() 功能:将张量按维度dim进行拼接,且[不会扩张张量的维度] tensors:张量序列 dim:要拼接的维度 torch.cat(tensors, di ...
- 漏洞复现-CVE-2014-3120-ElasticSearch 命令执行漏洞
0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 < ElasticSearch 1.2的版本 ...
- super_curd组件技术点总结
1.基于包的导入的方式实现单例模式 # test1.py class AdminSite(object): def __init__(self): self.registry = {} self.ap ...
- vue之better-scroll详解及封装
在我们的h5或移动端网页开发中,常常会需要实现滚动加载数据,等需求,而在开发中原生开发往往会带来意想不到的问题,因此我们引入better-scroll来帮我们实现流畅的滚动效果. 什么是better- ...