java中Hashcode的作用【详解版】

一 HashCode作用

1.1 HashCode作用

hashCode是object类的一个方法,用于哈希表结构,主要是用来获取哈希值,用于确定对象在哈希表中的位置,如果两个对象的hashcode相同,那么他们可能被放在哈希表同一个位置(这取决于哈希表的实现)。

当我们在进行对象比较时,如果两个对象内容相等(即equals()方法返回true),那么它们的hashCode()也必须相等。

https://mp.weixin.qq.com/s/1875v3H9v7KK0KodeBPDhQ

1.2 重写equals()的时候为何必须重写hashcode()

每次重写equals()方法时,hashCode()方法也需要重写,就是为了保证:如果两个对象调用equals()方法返回的结果为true,那么两个对象调用 hashCode()方法返回的结果也必然相同。

如果重写equals()时没有重写 hashCode()方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等

https://blog.csdn.net/weixin_66196770/article/details/136877179

1.3 案例

如果两个对象调用equals()方法得到的结果为true,调用hashCode()方法得到的结果必定相等

System.out.println("AA".hashCode());//2080
System.out.println("AA".hashCode());//2080

如果两个对象调用hashCode()方法得到的结果相等,调用equals()方法得到的结果不一定相等

System.out.println("Aa".hashCode());//2112
System.out.println("BB".hashCode());//2112
System.out.println();
System.out.println("柳柴".hashCode());//851553
System.out.println("柴柕".hashCode());//851553

Java 中的 hashCode_java hashcode-CSDN博客

结论:两个对象的hashCode值相等并不代表两个对象就相等。

1.4 hashset原理

Hashset的底层是hashmap数据结构,hashset在添加元素时,调用add方法,使用hashcode()与equals()两个方法确定唯一性。原理如下:

hashCode方法返回的就是一个哈希码值,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的位置上。

如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;

如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。

这样一来实际调用equals方法的次数就大大降低了,相应就大大提高了执行速度。

如果两个对象的hashCode值相等,那这两个对象不一定相等(哈希碰撞)。

如果两个对象的hashCode值相等并且equals()方法也返回 true,我们才认为这两个对象相等。

如果两个对象的hashCode值不相等,我们就可以直接认为这两个对象不相等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每天值得看】文章获得《每天值得看》人工智能板块推荐第三名!为自己点个赞!!!

[2024-07-19]|CSDN每天值得看|人工智能 ① 【机器学习】Grid Search: 一种系统性的超参数优化方法(鑫宝Code:[博客] [成就]) [质量分:97;难度等级:未知;新鲜技术:99] 摘…

辅助类BigDecima/BigInteger

** 大数据的运算** 编号1方法解释1add2subtract-3multiply*4divide/

如何发一篇顶会论文? 涉及3D高斯,slam,自动驾驶,三维点云等等

SLAM&3DGS 1)SLAM/3DGS/三维点云/医疗图像/扩散模型/结构光/Transformer/CNN/Mamba/位姿估计 顶会论文指导 2)基于环境信息的定位,重建与场景理解 3)轻量级高保真Gaussian Splatting 4)基于大模型与GS的 6D pose e…

AutoMQ 生态集成 Redpanda Console

通过 Kafka Web UI 更加便利地管理 Kafka/AutoMQ 集群 随着大数据技术的飞速发展,Kafka 作为一种高吞吐量、低延迟的分布式消息系统,已经成为企业实时数据处理的核心组件。然而,Kafka 集群的管理和监控却并非易事。传统的命令行工具和脚本虽…

C++从入门到起飞之——this指针 全方位剖析!

个人主页:秋风起,再归来~ C从入门到起飞 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 目录 1、this指针 2、C和C语⾔实现Stack对⽐ C实现Stack代码 C实现Stack代…

c# listview控件调整标题显示顺序

右键点击listview,选择编辑列 修改DisplayIndex listview在成员位置点击上下箭头移动后,实际显示不会改变,因为DisplayIndex没有改变

【Git】(基础篇四)—— GitHub使用

GitHub使用 经过上一篇的文章,相信大家已经对git的基本操作熟悉了,但哪些使用git的方法只是在本地仓库进行,本文介绍如何使用git和远程仓库进行连接使用。 Github和Gitee 主要用到的两个远程仓库在线平台是github和gitee GitHub GitHub …

STM32第十九课:FreeRTOS移植和使用

目录 需求一、FreeRtos概要二、移植FreeRtos1.复制源码2.内存空间分配和内核相关接口3.FreeRTOSConfig.h4.在工程中添加.c.h 三、任务块操作1.创建任务2.任务挂起,恢复,删除 四、需求实现代码 需求 1.将FreeRtos(嵌入式实时操作系统&#xf…

若依框架中Spring Cloud版本启动失败问题

RuoYiSystemApplication启动不了 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ruoyi.system.mapper.SysConfigMapper.selectConfigList 该问题是因为在我们拉取若依代码到本地之后,没有对配置作改动,而且若依…

服务器基础1

服务器基础复习01 1.环境部署 系统:华为欧拉系统 网络简单配置nmtui 因为华为欧拉系统密码需要复杂度 所以我们可以进入后更改密码 echo 123 | passwd --stdin root也可以 echo "root:123" | chpasswd2.关闭防火墙,禁用SElinux 首先先关…

纠正和防止机器学习中的不公平现象

「AI秘籍」系列课程: 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识AI 进阶:企业项目实战 预处理、处理中、后处理方法和非定量方法 机器学习中的公平性是一个复杂的问题。更糟糕的是,负…

加密传输及相关安全验证:

1.1. 加密: 1.1.1. 对称加密: 特点:加解密用一个密钥,加解密效率高,速度快,有密钥交互的问题问题:双方如何交互对称密钥的问题,用非对称密钥的公钥加密对称密钥的混合加密方式常用…

[数据分析]脑图像处理工具

###############ATTENTION!############### 非常需要注意软件适配的操作系统!有些仅适用于Linux,可以点进各自软件手册查看详情。 需要自行查看支持的影像模态。 代码库和软件我没有加以区分。 不是专门预处理的博客!&#xf…

C语言 底层逻辑详细阐述指针(一)万字讲解 #指针是什么? #指针和指针类型 #指针的解引用 #野指针 #指针的运算 #指针和数组 #二级指针 #指针数组

文章目录 前言 序1:什么是内存? 序2:地址是怎么产生的? 一、指针是什么 1、指针变量的创建及其意义: 2、指针变量的大小 二、指针的解引用 三、指针类型存在的意义 四、野指针 1、什么是野指针 2、野指针的成因 a、指…

《基于 Kafka + Quartz 实现时限质控方案》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

学习分布式事务遇到的小bug

一、介绍Seata 在处理分布式事务时我用到是Seata,Seata的事务管理中有三个重要的角色: TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器…

PHP pwn 学习 (2)

文章目录 A. 逆向分析A.1 基本数据获取A.2 函数逆向zif_addHackerzif_removeHackerzif_displayHackerzif_editHacker A.3 PHP 内存分配 A.4 漏洞挖掘B. 漏洞利用B.1 PHP调试B.2 exp 上一篇blog中,我们学习了一些PHP extension for C的基本内容,下面结合一…

Open3D Ransac算法拟合点云球面

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2拟合后点云 前期试读,后续会将博客加入该专栏,欢迎订阅 Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述 RANSAC&a…

【Chatgpt大语言模型医学领域中如何应用】

随着人工智能技术 AI 的不断发展和应用,ChatGPT 作为一种强大的自然语言处理技术,无论是 自然语言处理、对话系统、机器翻译、内容生成、图像生成,还是语音识别、计算机视觉等方面,ChatGPT 都有着广泛的应用前景。特别在临床医学领…

pycharm如何debug for循环里面的错误值

一般debug时,在for循环里面的话,需要自己一步一步点。如果循环几百次那种就比较麻烦。此时可以采用try except的方式来解决 例子如下 #ptyhon debug for循环的代码 num[1,2,3,s,4] ans0 for i in num:try:ansiexcept:print(错误) print(ans) 结果如下&a…