首页 > 其他分享 >为什么重写equals方法就一定要重写hashCode方法

为什么重写equals方法就一定要重写hashCode方法

时间:2023-04-22 20:12:20浏览次数:39  
标签:相同 重写 equals hashCode 哈希 方法

在hashMap和hashTable集合中,元素是不能够重复的,所以我们在添加元素时,先要判断是否存在这个元素。而判断的方法就是先用hashCode方法判断哈希值是否相同,如果哈希值相同,再使用equals判断是否相同,如果都相同,则才证明两个元素不同。而如果哈希值不同,则不会进行后续的equals判断。哈希值是JVM根据每个对象随机生成的。所以如果只重写了equals方法,而不重写hashCode方法,就可能将两个具有内容相同、内存地址不同的对象,存储到集合中,我们在获取元素的数据时,就会发现,两个内容相同的对象却存储在集合的不同位置,从而在执行程序时发生错误。

标签:相同,重写,equals,hashCode,哈希,方法
From: https://www.cnblogs.com/wgh123/p/17343801.html

相关文章

  • 2023-04-21:用go语言重写ffmpeg的metadata.c示例。
    2023-04-21:用go语言重写ffmpeg的metadata.c示例。答案2023-04-21:这段Go代码演示了如何使用ffmpeg-go库中的函数来读取多媒体文件元数据,包括视频、音频等信息。它的大体过程如下:设置环境变量以加载FFmpeg动态链接库这里将FFmpeg库中的各个动态链接库路径添加到环境变......
  • Java Long对象对比,用equals函数
    文章目录一、前文二、调试三、后记一、前文同事问我一个问题,我咋一看也愣住了代码:if(ObjectUtil.isNotNull(temp.getUserId())&&temp.getUserId()!=SecurityUtils.getUserId()){logger.error(temp.toString());logger.error("SecurityUtils.getUserId()="+Secur......
  • 关于Java中方法重载和方法重写
    方法重写是子类继承父类(默认继承Object类)后覆盖父类的方法需要保证同名同参同返回值且访问权限范围不能缩小(public>protected>default>private)publicclassFather{ publicintmethod(){ return-1; }}classSonextendsFather{ //访问范围不能小返回值方法......
  • super关键字和方法重写
    1.super关键字介绍super代表父类的引用,用于访问父类的属性、方法、构造器2.基本语法297代码在com.stulzl.super_.包中父类Apackagecom.stulzl.super_;publicclassA{//4个属性publicintn1=100;protectedintn2=200;intn3=300;private......
  • KingbaseES避免表的重写与数据类型二进制兼容
    KingbaseES避免表的重写与数据类型二进制兼容一、关于KingbaseES变更表结构表的重写:1.修改表结构可能会导致表进行重写(表OID发生变化)。2.修改表结构带有索引或者字段类型长度或者精度操作时,会触发索引重建。3.不修改列内容且旧类型与新类型二进制兼容(binarycoercible),不需要重......
  • C++ —— 重载、重写和重定义
    1重载一般是类内部方法的关系classMyClass{public:voidMyPrint();voidMyPrint(intcnt);voidMyPrint(intcnt,conststring&msg);};2重写一般父子类中方法的关系对父类虚函数进行重载classMyClass{public:virtualvoidMyPrint();};c......
  • == 与equals
    在Java中,==操作符比较的是两个字符串对象的内存地址是否相同,而equals()方法比较的是两个字符串对象的值是否相等。通常情况下,如果两个字符串的内容相同,它们的内存地址也很有可能相同,此时==操作符和equals()方法都会返回true。然而,在以下情况下,equals()方法可能返回true而==操作符......
  • 『0008』- Solidity中public、internal、private在状态变量和函数中的使用以及Solidit
    作者:黎跃春,在上一小节中我们在函数参数中使用storage这个关键字时,当前的函数必须是internal或者private类型。在本小节中,我(微信:liyc1215)将重点为大家介绍属性和函数的使用权限。状态变量、函数的权限一、public备注:为了演示方便,我直接通过https://remix.ethereum.org/来进行演示。p......
  • C# 利用base继承父类的传参方法(全面的例子,包括虚方法和重写方法)
     显而易见,将我这段代码跑一遍就可以理解并会用了  publicinterfaceIAnimal{voidMove();}publicclassAnimal:IAnimal{publicstringName{get;set;}publicintAge{get;set;}publicAnimal(stringname,......
  • Java中子类重写父类方法的思想本质!
    Java语言中,在子类中定义与父类同返同名同参的方法将会出现“重写(覆写)”,子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法。许多初学者也许会被“覆写”一词迷惑,以为覆盖掉了父类的方法,其实这两种方法是同时独立存在的,只是子父类调用该方法的入口不一样,彼......