想要知道这个问题,首先需要知道hashcode它的作用:

HashCode的作用:

首先来看HashCode的作用,当把对象加入HashSet中时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会跟其他已经加入的对象的hashcode值作一个比较,如果没有相等的hashcode值,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,就会调用equals()方法来检查hashcode值相等的对象是否真的相同。如果两个对象相同,HashSet就不会让它加入。如果不同的话,就会把它重新散列到其他位置。这样我们就大大减少了 equals的次数,相应就大大提高了执行速度。

为什么重写equals就必须重写hashcode呢?

equals在object类里的作用是比较两个引用指向的是否是同一个对象, 也就是两个对象的地址是否相同,但是我们在实际开发过程中,这种开发方式往往不满足我们的需求,比如我们有一个person类,我们的需求可能是当一个人的年龄和姓名和性别都相同时,我们就认为这是同一个人所以我们需要重写equals方法来自行决定两个对象相等的判别方式 。但是在hashMap的底层判断两个对象是否相同,是需要hashcode和equals同时来决定的,先用hashcode进行比较找到大概的位置,如果相等了就使用equals进行精确判断,如果不相等就不用再次判断了,减少使用equals开销,所以如果我们只重写了equals但是没有重写hashcode,就可能会出现,equals比较相等,但是hashcode不等的情况,两个对象equals相等的话,hashcode值是必然相等的,这就产生了矛盾。

为什么重写equals方法必须重写hashcode方法相关推荐

  1. 为什么重写equals一定要重写hashCode方法?

    大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 下面我们看下Objec ...

  2. Java入门集合之Set集合(重写equals()和hashcode()方法)

    概述 Set接口继承Collection Set接口常用实现类 HashSet 实现了 Set 接口 "它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变"(存入该实现类对 ...

  3. 重写equals为什么要重写hashcode

    一.equals()方法 equals是Object类的一个公有方法,在Java中,所有的类都会继承Object(包括数组),所以所有的类都有equals方法.他的用途也很明了,就是比较两个对象是否相 ...

  4. 为什么重写equals一定要重写hashcode?

    引言 这篇文章已经是我很久之前写的,其中的内容表述得不太清楚,或多或少难以让人信服,于是我又写了一篇,链接如下: CSDN链接:彻底搞懂为什么重写equals还要重写hashcode?  微信公众号链 ...

  5. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解

    前言 大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白. 在上一篇博文Ja ...

  6. 为什么重写equals时必须重写hashCode方法?

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashco ...

  7. Java的重写equals但不重写hashCode方法的影响

    首先,说下equals和hashCode的关系.JDK API中关于Object类的equals和hashCode方法中说过,总结起来就是两句话:equals相等的两个对象的hashCode也一定相等 ...

  8. java 为什么重写equals一定要重写hashcode?

    前言 最近复习,又看到了这个问题,在此记录和整理,通过例子来说明这种情况的原因,使大家可以清晰明白这个问题. 初步探索 首先我们要了解equals方法是什么,hashcode方法是什么. equals ...

  9. 重写equals就必须重写hashCode的原理分析

    因为最近在整理Java集合的源码, 所以今天再来谈谈这个古老的话题,因为后面讲HashMap会用到这个知识点, 所以重新梳理下. 如果不被重写(原生Object)的hashCode和equals是什么 ...

  10. java 中为什么重写 equals 后需要重写 hashCode

最新文章

  1. CSLA.Net学习(1)——第一个小程序
  2. [技术基础]计算机网络技术基础名词解释
  3. definer= 授权_mysql常见问题之视图权限控制--安全性为DEFINER
  4. 交叉编译openwrt php,构建 openwrt 交叉编译工具链
  5. phpcms:八、show.html
  6. matlab 实验5,MATLAB实验5报告.doc
  7. 消除单点,一篇搞定 | 架构设计篇
  8. sqlite3学习笔记-方法介绍和测试代码
  9. 翻译:谁将在AI中赚钱?by Simon Greenman
  10. 一首关于远方和理想的小诗
  11. Java中grabImage_JavaCV实现将视频以帧方式抽取
  12. Java 日期的各种操作
  13. 【国内SEO大牛】网站统计显示被违禁词搜索进来原因
  14. maven到底是什么
  15. 【周志华机器学习】绪论
  16. 【Android IBeacon室内定位】Android Beacon Library之搜索最近的beacon
  17. 小程序miniprogram自动化上传,不需要依赖微信开发者工具
  18. 苏宁联盟接入php,苏宁api申请教程
  19. 【ppt制作软件】Focusky教程 | 如何删除单元格?
  20. 如何在IDEA运行Applet程序

热门文章

  1. EDI 850 采购订单
  2. chatgpt微调fine-tuning
  3. 硬盘数据恢复软件哪个好?
  4. c#调用windows api C#简单游戏外挂制作(以Warcraft Ⅲ为例)
  5. conda常用命令(Anaconda Prompt管理员身份运行)
  6. LADN: Local Adversarial Disentangling Network for Facial Makeup and De-Makeup
  7. mysql8.0遇到的一些坑
  8. 【粉丝福利】天猫618狂欢倒计时,小胖发福利
  9. 【Bug】Tomcat异常Serveral ports(8005,8080,8009) required by Tomcat v8.0 Server at localhost are already
  10. Mac 上的蓝牙设备断开连接如何修复?