当前位置: 首页 > news >正文

重写equals()方法为什么同时要重写hashcode()

equals()方法

equals()方法是Object类中的一个方法,在Object类中,equals等同于==。

在不同的类中,往往会对equals()按需求进行重写。重写的目的都是:用于比较两个对象是否 "相等"。如果两个对象的内容相同,那么 equals() 方法应该返回 true。

hashcode()方法

hashcode()方法用于计算一个对象的哈希码,哈希码是一个整数值。哈希码主要用于哈希表(例如 HashMap、HashSet)的实现,用于快速定位对象在哈希表中的位置。

Java 规定,如果两个对象是 "相等" 的(equals() 方法返回 true),那么它们的哈希码(hashCode() 方法返回的值)也应该是相同的,如果两个对象的哈希码不同,那么它们一定不相等。但是,如果两个对象的哈希码相同,它们也不一定就相等,因为哈希码只是一个散列值,有可能出现不同对象的哈希码相同的情况("哈希冲突")。

重写equals()方法为什么同时要重写hashcode() ?

如果没有重写 hashCode() 方法,默认情况下,hashCode() 方法返回的是对象的内存地址散列值。这样可能会导致使用该对象作为 HashMap 或 HashSet 的 key 时,无法正确地存取数据。

在我们重写equals时是为了:当两个对象A和B的内容一样时,把它们判定为同一个对象。所以此时重写了equals(),equals()返回为true,如果此时没有重写hashcode(),由于A和B的地址是不同的,hashcode()会把它们判定为false,那么这两个对象在HashMap中被视为不同的key,这显然不符合我们的预期。

我们目标是equals()和hashcode()都是true,所以都要重写。

http://www.lryc.cn/news/394824.html

相关文章:

  • 安全及应用(更新)
  • Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统
  • Rust入门实战 编写Minecraft启动器#2建立资源模型
  • 小白学C++(第一天)基础入门
  • 谷歌正在试行人脸识别办公室安全系统
  • 【CSS01】CSS概述,使用样式的必要性,CSS语法及选择器
  • PostgreSQL的pg_bulkload工具
  • 【Java伴学笔记】Day-01 命令行|环境|编译解释运行|Java的相关分支|Java的特性|字面量
  • 如何使用Vue3创建在线三维模型展示?
  • 使用ndoe实现自动化完成增删改查接口
  • 排序 -- 手撕归并排序(递归和非递归写法)
  • 防火墙基础及登录(华为)
  • 【Vue】使用html、css实现鱼骨组件
  • Python的多态
  • 001uboot体验
  • Flask之电子邮件
  • Vue 2 与 ECharts:结合使用实现动态数据可视化
  • .net core Redis 使用有序集合实现延迟队列
  • linux 安装Openjdk1.8
  • 鸿蒙系统:未来智能生态的引领者
  • Java语言程序设计——篇二(1)
  • 水果商城系统 SpringBoot+Vue
  • 半导体制造企业 文件共享存储应用
  • 深入分析 Android BroadcastReceiver (九)
  • 从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!
  • 全景图三维3D模型VR全景上传展示H5开发
  • 前端面试题29(js闭包和主要用途)
  • 使用Keil 点亮LED灯 F103ZET6
  • 流批一体计算引擎-12-[Flink]旁路输出getSideOutput(OutputTag)实现拆分流和复制流
  • 【Scrapy】 Scrapy 爬虫框架