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] 摘…

第2部分:物联网模式在行动

第2部分:物联网模式在行动 上一部分中详细介绍的模式可以混合和匹配,以实现物联网用例。本部分提供了这些模式的有效性证明,以满足不同领域的独特需求并实施用例,包括消费品和家庭自动化、零售、运输、制造和农业。 本部分包括以…

辅助类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…

无重复字符的最长子串(leetcode)

题目来源:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 题意 如题,给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度 思路 考点:哈希表滑动窗口 如果我们用两重循…

AutoMQ 生态集成 Redpanda Console

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

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

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

华为OD机考题(基础API)

基础API 字典排序 List<String> listnew ArrayList(); //add list member Arrays.sort(list);List<Map<String,Integer>> listnew ArrayList(); //add list member Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {Over…

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

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

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

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

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

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

白骑士的C++教学高级篇 3.2 多线程与并发

系列目录 上一篇&#xff1a;白骑士的C教学高级篇 3.1 文件操作 随着计算机硬件的发展&#xff0c;现代计算机通常配备了多核处理器&#xff0c;为并发编程提供了硬件基础。C11引入了一组强大的多线程库&#xff0c;使得开发多线程应用程序变得更加容易和安全。本篇内容将详细…

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

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

在Python中字典是如何通过哈希表实现的以及哈希冲突是如何解决的

哈希表&#xff08;散列表&#xff09;是一种非常重要的数据结构&#xff0c;它提供了快速的插入、查找和删除操作&#xff0c;平均时间复杂度接近O(1)。哈希表通过哈希函数将键&#xff08;key&#xff09;映射到表中的一个位置来访问记录&#xff0c;以加快查找速度。下面分别…

如何使用Python抓取动态网站数据

引言 动态网站的特点和数据抓取的挑战 动态网站通过JavaScript动态生成内容&#xff0c;这使得数据抓取变得更加复杂。传统的静态HTML解析方法无法获取这些动态生成的数据&#xff0c;因为它们在初始加载时并不存在于HTML源代码中。对于数据科学家和开发者来说&#xff0c;从这…

React Hook 总结(React 萌新升级打怪中...)

1 useCallback useMemo 和 useCallback 接收的参数都是一样&#xff0c;都是在其依赖项发生变化后才执行&#xff0c;都是返回缓存的值&#xff0c;区别在于 useMemo 返回的是函数运行的结果&#xff0c;useCallback 返回的是函数。 当需要使用 useCallback 的情况通常包括以…

Kylin系列入门

Kylin是中国最流行的开源大数据平台之一&#xff0c;主要用于解决大数据存储、处理和分析问题。Kylin的目标是将大数据分析变得更简单、更快速和更高效。下面是Kylin系列的入门指南&#xff0c;带有一些示例。 什么是 Kylin&#xff1f; Kylin是Apache Kylin项目下的一个开源…

服务器基础1

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

Socket 简介与 Java Socket 编程示例

Socket&#xff08;套接字&#xff09;是网络通信中的一个关键概念&#xff0c;它是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一、定义与概念 基本概念&#xff1a;Socket可以被视为网络环境中进程间通信的API&#xff08;应用程序编程接口&#xff09;&…

彻底理解Linux的DISPLAY变量的作用

背景 最近遇到个两年前遇到的问题&#xff0c;使用virt-manager提示(virt-manager:873): Gtk-WARNING **: 14:53:28.147: cannot open display: :1&#xff0c;当时专门运维的同事帮忙临时调了下DISPLAY变量&#xff0c;好像是将:1改成了SSH用户本地IP:10.0&#xff0c;当时的…