hashCode和equals作用与关系

2023-05-16

hashCode和equals作用

hashCode和equals作用实际上差不多,都是用来比较两个对象是否相同。但是equals比较更加全面准确,所以比较复杂,这样效率很低,所以我们还要使用hashCode生成一个值,如果值不同则认为两个对象不同,这样可以提高效率。当hashCode与equals都判断相同时,我们认为这两个对象是重复对象。

hashCode和equals关系

这里通过代码来了解hashCode和equals的关系

public class Worker {
	String name;
	int salary;

	public Worker(String name, int salary) {
		super();
		this.name = name;
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Worker [name=" + name + ", salary=" + salary + "]";
	}

	@Override
	public int hashCode() {
		System.out.println("hashCode");
		return salary;
	}

	@Override
	public boolean equals(Object obj) {
		System.out.println("equals");
		Worker w = (Worker) obj;
		return name.equals(w.name);
	}

	public static void main(String[] args) {
		HashSet<Worker> set = new HashSet<>();
		Worker w1 = new Worker("张三", 5000);
		Worker w2 = new Worker("张三", 6000);
		Worker w3 = new Worker("张三", 5000);
		Worker w4 = new Worker("李四", 5000);
		set.add(w1);
		set.add(w2);
		set.add(w3);
		set.add(w4);

		Iterator<Worker> iterator = set.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

运行结果:
在这里插入图片描述
为了方便我把Worker类中的salary属性作为hashcode值返回,equals比较两对象的姓名是否相同。
从运行结果可以看出,当往HashSet集合中添加元素时会先调用hashCode方法获取hash值,如果集合中没有元素的hash值与这个值相同,则认为这个元素没有重复,便不会再调用equals方法,上面的结果中w2的salary值与w1的不同,所以并没有继续调用equals方法;当hash值与集合中的其他元素出现重复,这个时候才会调用equals方法,上面的结果中,w4的salary值与集合中的其他元素重复所以调用了equals方法与其他元素比较name是否相同。上面的结果中,w3的salary与name与w1都相同,hashCode与equals都判断为相同,所以没有加入到集合中。

结论:

当hashCode判断相同时,equals判断未必相同
当equals判断相同时,hashCode判断一定相同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hashCode和equals作用与关系 的相关文章

随机推荐

  • github加载太慢以及release里面文件下载太慢或者无法下载的解决方法

    参考链接 xff1a github下载与加载慢怎么解决 1 FastGithub 项目 解决github加载太慢 xff0c 解决releases无法上传下载失败等问题 2 dev sidecar 项目 解决github加载太慢 xff0c
  • Git常用命令符

    1 强制推送 xff08 慎用 xff0c 除非你认为其他冲突等可以丢弃 或者不是很重要 xff09 git push force 2 创建文件等小命令 touch a 创建一个a文件 echo 1234 gt gt a 把1234这个内容
  • ffmpeg--libswscale(图像缩放、颜色空间和像素格式转换操作)

    libswscale介绍 span class token number 1 span span class token number 2 span 种初始化方法 xff1a span class token keyword struct
  • vmware Ubuntu22.04共享文件夹找不到问题

    1 在VMware上先配置Windows上需要共享的文件名称路径 xff0c 选择 总是开启 2 在终端执行命令 xff1a vmware hgfsclient 当前面一步配置正确会显示 xff0c windows下共享的文件夹名称 但是我
  • Ubuntu Server 22.04修改静态ip及配置网关

    1 查看本机获取的IP地址 xff1a 输入命令 ip addr xff1a 2 修改配置文件 跳转到配置文件目录 xff1a cd etc netplan 使用ls查看配置文件名称 xff1a ls 使用nano修改配置文件 xff1a
  • 【二】卷积神经网络CNN

    为什么设计神经网络的架构能让结果表现更好 xff1f 总结 本课从影像识别切入 xff0c 从全连接网络讲起 xff0c 通过2种观察得出2种简化得到了CNN xff0c 一是有些pattern仅出现在图片的一小部分提出了感受野 xff0c
  • Docker Error :Invalid or corrupt jarfile .jar

    他提示的是你的jar包有问题 xff0c 无效 那么有很多种情况 xff0c 我遇到的是两种 dockerfile有问题 xff0c 我的dockerfile一开始是直接网上复制的 xff0c 其中有一句是将jar包copy进到容器 xff
  • Python每日一编程小练习(2019.05.26)——1到3循环报数,最后留下报号不是3的位置

    题目 xff1a 有n个人围成一圈 xff0c 顺序排号 xff0c 从第一个人开始报数 xff08 从1 3报数 xff09 xff0c 凡报到3的人退出圈子 问 xff1a 最后留下的人原来排在第几号 难点 xff1a 如何定义一个能循
  • 解决Ubuntu16.04拨号上网及有线连接频繁断网的问题

    最近从Ubuntu14 04换到了16 04 xff0c 学校又从锐捷校园网换成了深澜 xff0c 于是上网时候遇到了一些小问题 首先解决在Ubuntu下拨号上网 首先终端输入 sudo pppoeconf 之后就会出现一个界面 xff0c
  • Debian10配置Raid5及部署LVM

    Debian10配置 Raid5 任务点 添加4块1G的硬盘 创建raid5 xff0c 其中一块作为热备盘 xff0c 设备名为md0 将md0设置为LVM xff0c 设备为 dev vg01 lv01 格式化为ext4文件系统 开机自
  • Debian 10 apache2配置https

    apache2配置https 首先需要证书 xff0c 可以看我另一篇关于openssl颁发证书的blog 配置https span class token comment 编辑配置文件 span span class token func
  • 使用树莓派3B+开发智能音乐播放器

    一 功能描述 对麦克风说出歌名后 xff0c 树莓派自动下载对应歌曲的MP3 xff0c 默认播放搜索到的第一首歌曲 二 硬件设备 1 树莓派3B 43 2 sony的ps3 eye麦克风一个 xff08 淘宝20块一个 xff0c 带摄像
  • MySQL8.0最新版安装及一些注意事项

    借鉴文章 xff1a https blog csdn net theLostLamb article details 78797643 一 MySQL下载 首先 xff0c 去数据库的官网mysql官网http www mysql com下
  • Android逆向分析实例(三)-解密微信EnMicroMsg.db数据库

    1 简介 首先介绍下EnMicroMsg db数据库 xff1a 这个数据库是存放在Android手机本地的用来保存微信聊天记录的一个数据库 xff0c 是一个Sqlite数据库 xff0c 且手机必须要有root权限才能获取到 xff0c
  • 虚拟机磁盘扩容(纯命令行)

    背景 xff1a 磁盘使用率达到100 xff0c 无大数据文件可删除 xff0c 需要进行磁盘扩容 步骤 xff1a 1 虚拟机调高分配给磁盘的大小 2 启动虚拟机 xff0c 查看磁盘是否扩容 fdisk l 3 扩容磁盘分区 fdis
  • 数据划分处理(基于python的pandas中的dataframe数据结构)

    数据划分处理 xff08 基于python的pandas中的dataframe数据结构 xff09 我们常常需要从一个表格中 xff0c 得到相关的子表格 正如问题 xff1a 按国家 xff0c 从原始资源表中得到金银铜的年储量变化 xf
  • 【springboot】配置实现https单项认证和双向认证

    1 什么是https HTTPS其实是HTTP 43 SSL xff0c S的含义也就是Secure Socket Layer xff08 简称SSL xff09 下边简单介绍一下SSL SSL是用于在web上实现加密最广泛使用的协议 SS
  • samba访问共享提示,NT_STATUS_ACCESS_DENIED listing \*

    rhce练习samba共享配置好 xff0c client验证提示NT STATUS ACCESS DENIED listing root 64 system2 smbclient 172 24 8 11 devops U akira re
  • C++——木棒加工问题求解

    问题描述 现有n根木棒 xff0c 已知它们的长度和重量 xff0c 要用一部木工机一根一根地加工这些木棒 该机器在加工过程中需要一定的准备时间 xff0c 是用于清洗机器 xff0c 调整工具和模板的 木工机需要的准备时间如下 xff1a
  • hashCode和equals作用与关系

    hashCode和equals作用 hashCode和equals作用实际上差不多 xff0c 都是用来比较两个对象是否相同 但是equals比较更加全面准确 xff0c 所以比较复杂 xff0c 这样效率很低 xff0c 所以我们还要使用