hashcode讲解【最详细版本】

article/2025/9/30 6:10:44

Object 基类

Object 含有的方法
object

hashCode

作用:用于查找的快捷性,常用于确定对象的存储地址
HashtableHashMap
默认情况下,Object中的hashCode() 返回对象的32jvm内存地址。

如果两个对象相同, equals方法一定返回true,并且这两个对象的HashCode一定相同
两个对象的HashCode相同,并不一定表示两个对象就相同,即equals()不一定为true,只能说明这两个对象在一个散列存储结构中,所以当产生哈希冲突时,还得通过 equals() 方法进一步判断两个对象是否相同

哈希算法也称为散列算法,是将数据依靠 hash函数直接指定到一个地址上。当集合要添加新的元素时,先调用这个元素的hashCode方法,能定位到它应该放置的物理位置上。

该位置没有元素,直接存储,不进行比较
该位置有元素,直接调用 equals函数与新元素比较,相等的话,就不存储了。不相同的话就是发生了 Hash
key相同导致冲突的情况,那么就在这个 Hash key的地方产生一个链表,将所有产生相同HashCode的对象放
到这个单链表上去,串在一起。这样实际调用equals方法的次数就大大降低了,几乎只需要一两次。

JVM每new一个Object,它都会将这个Object丢到一个Hash表中去,这样的话,读取过程,它会根据对象的HashCode再从Hash表中取这个对象。若HashCode相同再去调用equal。
这样做的目的是提高取对象的效率

重写 hashcodeequals方法可以迅速的在hashmap中找到 key的位置;
1、重写hashcode是为了保证相同的对象会有相同的hashcode
2、重写equals是为了保证在发生冲突的情况下取得到Entry对象(就是 key或是元素);

HashCode()和equals()的区别

hashcode()用于获取hash码,equals()用于比较两个对象是否相等。
遵循以下的规定:

  • 如果两个对象相等,hashCode一定相等
  • 如果两个对象的hashCode相等,他们未必相等

hashSet为例,HashSet首先会调用对象的hashCode()获取到哈希码,并且通过哈希码确定该对象在集合中的位置。假设这个位置已经保存了一个对象,则HashSet就会调用equals()对两个对象进行比较,如相等则说明两个对象重复,不会保存新的对象,直接舍弃即可。如若不相等,就说明这两个对象存储的位置发生了碰撞,此时HashSet就会采用链式结构在同一位置保存多个对象,将新对象加入到链表的尾部。之后,再有新添加的对象也映射到这个位置的时候,就需要和这个链表中的所有的对象进行equals()比较,如不相等,继续添加到链表之后。

参考
hashcode


http://chatgpt.dhexx.cn/article/LvvFYw3p.shtml

相关文章

hashcode详解

前言 HashCode是在Java中用于获取对象的唯一标识符的方法。它是根据对象的内容生成的一个整数值。对象的hashCode()方法被调用时,它返回的是对象的哈希码。哈希码可以用于在哈希表等数据结构中快速定位对象。 在Java中,hashCode()方法是被Object类定义…

真正搞懂hashCode和hash算法

本人当初刚接触java的时候一说到hash算法或者hashCode也是蛋蛋疼,两只都疼 后来花了整整一天时间来研究hash,搞懂后发现其实也不难理解,时隔一年突然想起来,写篇博客记录下; 以前我莫得选择,现在我想搞懂…

腾讯_TEG一面

总结 不愧是腾讯内部技术含量较高的部门,上来怼基础。总体有套路可循,比较偏技术

腾讯技术解读|TEG—硬核拆解,腾讯产品的底层技术牛在哪里?

技术,是各个事业群的核心力量 然而,事业群的不同,核心力量也不同 你是否还在纠结事业群的选择? 担心对事业群不了解而选错事业群? 毫无疑问 技术也是事业群选择的重要衡量因素之一哦! 对此&#xff0c…

15 年腾讯老兵谈技术人成长之路

作者:alexguo,腾讯TEG技术总监&技术专家 每个职场人都会经历从职场新人到骨干、专家亦或是管理者的蜕变过程。作为技术职业人,大家常会碰到一些困惑,在不同职业发展阶段所需要具备的认知和专业能力差异在哪里?除了…

腾讯TEG客户端开发面经

2022年秋招/春招/提前批/大厂面经整理(持续更新中~) 腾讯TEG客户端开发面经 2021/05/19下午两点半初试 1、面试官先让做自我介绍,主要介绍项目,简短一点不需要太详细。 ------我大概讲了一下我的三个项目,第一个是高…

腾讯TEG首次集体亮相腾讯全球数字生态大会,这些亮点不容错过!

5月21日—23日,腾讯全球数字生态大会将在昆明滇池国际会展中心召开。大会是将腾讯过往的三大峰会“腾讯全球合作伙伴大会”、“腾讯云未来峰会”和“互联网数字经济峰会”进行有机整合,届时,众多行业领袖、技术领军人物、国际知名数字经济研究…

粉丝投稿!大三参加校招三面腾讯TEG实习岗面经分享,希望对大家有帮助!(已拿意向书)

背景介绍 背景:本科大三,末流211,计科专业,寒假在某bat一家实习 腾讯流程好快,从面到结束一周拿意向书,3.18开始一面,3.25拿到意向书 一面 75min 自我介绍学校做的项目有没有什么优点&#x…

TEG《选择》乘风破浪 · 披荆斩棘

等灯等灯~ 今夜,TEG《选择》在新年晚会闪亮登场 听说有人夸我们大歌舞大排面(蟹蟹) 其实咱剧情还搭载着回忆与梦境、理想与现实 来,他二哥就好好跟大家唠嗑唠嗑这《选择》 选择音乐剧 几句话概括我们的故事主线&#x…

什么是IEGT?

1980年前后,通用公司的B•贾扬•巴利加发明了IGBT,解决了当时MOSFET和普通双极功率晶体管无法解决的问题。但随着产品的发展,大家发现了这种新型器件拥有静态损耗的问题。于是东芝半导体的工程师就在上个世纪九十年代率先实现了栅极注入增强&…

关于【腾讯 TEG云架构平台部( 云架平) 存储组】

这算是个简单的辟谣帖吧 本人21届新人,入职快半年了,之前也在这边实习过半年,几乎不怎么看脉脉,但最近看到一些黑帖,本不想回复,但是考虑到自己也是应届生过来的,刚拿到offer肯定忍不住想从各方…

Carla自动驾驶仿真三:Traffic Manager交通管理器详解

CARLA Traffic Manager 一、什么是Traffic Manager1、Traffic Manager简介2、Traffic Manager框架3、Traffic Manager模块 二、Traffic Manager控制方法1、TM控制交通参与者的自动驾驶的规则2、TM控制交通参与者行为的API摘要3、TM控制交通参与者行为的API 三、Traffic Manager…

[carla入门教程]-5 使用ROS与carla通信

本专栏教程将记录从安装carla到调用carla的pythonAPI进行车辆操控并采集数据的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第五节 使用ros与carla通信 本小节的主要内容是介绍carla中的如何使用ros进行通信. 章节内容介…

CARLA安装记录(二)

安装好显卡驱动后,接下来的步骤是安装Unreal Engine。我的操作系统是Ubuntu 18.04 系统要求 Ubuntu 18.04。CARLA兼容Ubuntu 16.04及之前版本,但虚幻引擎正常工作需要合适的编译器。至少130GB磁盘空间。CARLA会占用大约31GB的空间,而虚幻引…

Carla安装记录

Carla安装记录 最近打算在做一些自动驾驶相关的东西,所以安装了一下Carla。在这里记录一些自己的安装过程中遇到的一些问题和解决的方法。 Carla release版本下载 想要安装Carla,可以选择release版本或者源码安装。在这里我主要介绍release版本的安装…

Carla中实现车辆轨迹获得

Carla中实现车辆循迹及车道保持(使用MPC和强化学习) 需要用到的 python apicarla.mapmethods一个简单的方法实现路径规划 carla.Waypointmethods carla.DebugHelpercarla.World 强化学习部分方法自动驾驶综述实验结果 模仿学习(Imitation Lea…

Carla学习(五) Carla常用传感器

Depth camera,输出carla.Image,深度相机使用三通道RGB值存储距离信息,然后将其转换为距离灰度图: normalized (R G * 256 B * 256 * 256) / (256 * 256 * 256 - 1) in_meters 1000 * normalized传感器数据包含: frame&#…

Carla传感器

1.介绍 Carla中传感器类别多种多样,不同传感器数据之间也存在差异。但是传感器的使用方法之间存在一致性。本文介绍Carla中传感器使用的通用方法。有关传感器的描述可以在carla.Sensor类中查看 2. 传感器的通用方法 在介绍传感器的通用方法之前,需要明…

Carla安装

近期在实习,入坑了Carla环境,分享一下安装经验 Quick start package installation - CARLA Simulator 文档里得安装说明还是比较全得,安装包比较大,我安装得是windons版本,遇到得坑不多,还是比较顺利得。 …

Carla学习(八)利用carla制作自己的kitti数据集

利用carla制作kitti 3D目标检测数据集基本上就是获得图片、雷达、2D和3D box。 这里主要需要解决的问题就是carla世界的坐标系和kitti数据集的坐标系不太一样,kitti坐标系如下所示: 具体的坐标转换我参考了Fredrik00 https://github.com/Ozzyz/carla-d…