打个比方,一个名叫张三的人去住酒店,在前台登记完名字就去了99层100号房间,此时警察来前台找叫张三的这个人住在哪间房,经过查询,该酒店住宿的有50个叫张三的,需要遍历查询,查询起来很不方便。

那么就换另外一种登记方式,前台登记时登记身份证号,警察来前台找身份证号时发现身份证号也存在重复,经过哈希算法进行计算后相同的hashcode值被分到了一个房间然后产生链表,链表查询效率非常慢,然后警察找的时候也会遇到问题。

那么只能换第三种登记方式了,前台登记时同时登记身份证号和名字,这样警察来找的时候同时按照两个条件去查,这样就能直接锁定要找的人在哪个房间。

在程序中:登记的前台好比哈希算法,名字是对比好比 equals 方法,身份证号的对比好比 hashcode 方法只有equals 和 hashcode 都满足的时候才能确保是同一个对象。

当我们重写一个类的 equals 方法时就应当连同重写 hashcode 方法,并且两个方法应满足:

1:一致性,即:当两个对象 equals 比较为 true,那么 hashcode 值应当相等,反之亦然,因为当两个对象hashcode 值相等,但是 equals 比较为 false,那么在 HashMap 中会产生链表,影响查询性能。

2:成对重写,即重写 equals 就应当重写 hashcode。

转载于:https://www.cnblogs.com/mike-mei/p/11222417.html

为什么要重写hashcode( )和equals( )?相关推荐

  1. 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写 hashcode 和 equals 方法?...

    1. 通过Hash算法来了解HashMap对象的高效性 2. 为什么要重写equals和hashCode方法 3. 对面试问题的说明 <Java 2019 超神之路> <Dubbo ...

  2. HashMap存自定义对象为什么要重写 hashcode 和 equals 方法?

    HashMap的k放过自定义对象么? 当我们把自定义对象存入HashMap中时,如果不重写hashcode和equals这两个方法,会得不到预期的结果. class Key{private Integ ...

  3. 为什么要重写 hashcode 和 equals 方法?

    我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...

  4. 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写hashcode和equals方法?你能说清楚了吗...

    我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有 ...

  5. HashMap存储自定义类型键值: 重写HashCode和equals方法

    一个团体作为一个HashMap的key值,若团体成员的姓名年龄相同,则看作key值相同 因为是自定义类,所以需要重写HashCode和equals方法 public class RedVelvet { ...

  6. 为什么重写HashCode和Equals

    HashCode和Equals 在最开始提出一个问题: 为什么hashcode()和equals()方法要一起重写? 为什么我们要重写HashCode和Equals? 在我们业务系统中判断对象有时需要 ...

  7. Java基础系列:重写hashCode和equals

    1 场景 Map的key设置为对象时,必须重写对象的hashCode和equals方法. 原因 通过对象取值时,及时相同的对象(初始化值相同),get时,会出现null值. 方案 重写对象的hashC ...

  8. 为什么使用HashMap需要重写hashcode和equals方法_java常见面试题敲黑板了,HashMap最全的整理,大厂必考...

    最近几天,在这样的大环境下显得疲惫不堪,但是我还是写下了这篇文章,希望对任何人都有用. HashMap是我们经常用到的数据结构,由数组和链表组成的数据结构如下图所示 上方是一张数组图片,数组里面每个地 ...

  9. 详解集合之HashMap——HashMap内部结构,自动扩容机制,为什么需要重写hashcode和equals方法

    HashMap底层实现是一个键值对Node数组,而Node实现了键值对Map.Entry接口 HashMap类继承结构图 1. HashMap对象的创建 1.1 默认的构造方法--只指定自动扩容时的加 ...

最新文章

  1. 计算机英语作文句子,英语作文经典句子
  2. 深度学习核心技术精讲100篇(十一)-Google利器超强特征提取网络(Transformer)
  3. 浅谈MyBatis一级缓存
  4. boost::sort模块spreadsort 完全排序的数据示例
  5. 关于Eclipse中复制粘贴一个项目后的操作
  6. java.lang.NoClassDefFoundError:如何解决–第3部分
  7. 面向对象-day02
  8. 1 linux网络诊断命令工具
  9. python工资这么高为什么不学-推崇Python这么多人,为什么他们找不到工作!
  10. Dummary、Fake、Stub、Spy、Mock
  11. 关于python的闭包与装饰器的实验
  12. 简单的钓鱼网站的制作
  13. 测量学7_地形图的基本知识
  14. 计算机自定义桌面设置在哪里设置,桌面显示日历设置方法
  15. 中国象棋java大作业doc_《java语言程序设计》课程设计-中国象棋对弈系统(源码).doc...
  16. 苹果手机照片流使用方法(iphone我的照片流在哪)
  17. Oracle生成data patching脚本
  18. SaaS企业如何巧用「组织力」来构建自身持续增长的根基?
  19. Denouncing Mafia
  20. BAT调用服务器的PHP文件时所遇到的问题

热门文章

  1. mysql myisam转innodb_Mysql MyISAM数据库批量转换表引擎为Innodb
  2. linux下数据库的基本管理,数据库的管理_linux 运维之道 基础篇的技术博客_51CTO博客...
  3. thinkphp5调用shell脚本_thinkphp5.x全版本任意代码执行getshell
  4. mysql一些原生基本操作
  5. 大牛整理:java去掉字符串中的逗号
  6. Java程序员校招蚂蚁金服,mysql培训考试
  7. 【2021年度训练联盟热身训练赛第二场】g2g c u l8r(python)
  8. Android移动开发之【Android企业级项目实战教程】DAY1-图表库HelloCharts
  9. 【深度学习笔记】Precision、Recall
  10. 华为鸿蒙系统需要谷歌的服务器吗,华为P40或用鸿蒙系统?余承东:如果不能使用谷歌服务会考虑...