为什么要重写hashcode( )和equals( )?
2024-09-02 15:31:38
打个比方,一个名叫张三的人去住酒店,在前台登记完名字就去了99层100号房间,此时警察来前台找叫张三的这个人住在哪间房,经过查询,该酒店住宿的有50个叫张三的,需要遍历查询,查询起来很不方便。
那么就换另外一种登记方式,前台登记时登记身份证号,警察来前台找身份证号时发现身份证号也存在重复,经过哈希算法进行计算后相同的hashcode值被分到了一个房间然后产生链表,链表查询效率非常慢,然后警察找的时候也会遇到问题。
那么只能换第三种登记方式了,前台登记时同时登记身份证号和名字,这样警察来找的时候同时按照两个条件去查,这样就能直接锁定要找的人在哪个房间。
在程序中:登记的前台好比哈希算法,名字是对比好比 equals 方法,身份证号的对比好比 hashcode 方法只有equals 和 hashcode 都满足的时候才能确保是同一个对象。
当我们重写一个类的 equals 方法时就应当连同重写 hashcode 方法,并且两个方法应满足:
1:一致性,即:当两个对象 equals 比较为 true,那么 hashcode 值应当相等,反之亦然,因为当两个对象hashcode 值相等,但是 equals 比较为 false,那么在 HashMap 中会产生链表,影响查询性能。
2:成对重写,即重写 equals 就应当重写 hashcode。
最新文章
- 关于lwip移植到ucsos-ii平台的遇到的问题(一)
- Linux 服务器的网络配置 - 2. 查看 Linux 服务器的进程
- bootstrap学习笔记<;一>;(bootstrap用法)
- [css] 垂直居中方法
- 快速构建express项目
- EasyUI 在aspx页面显示高度不正常解决办法
- Linux下安装mysql-5.6.4 的图文教程
- SSL 通信原理及Tomcat SSL 配置
- 【转】CTS tests 4.2_r4
- PHP MySQL Select 之Select
- 全屏显示网页FULLSCREEN API
- Paper藐小之处明察秋毫故时有物外之趣
- 【干货】提取图片元数据之exiftool
- 测试工具之badboy
- JavaScript有这几种测试
- MySQL数据库-表内容操作
- windows下vscode修复c++找不到头文件
- 集合框架map_DAY18
- bzoj1650
- Ubantu apt source 国内
热门文章
- cmd命令简单别木马的蛛丝马迹
- 【转载】ERROR 1044 (42000): Access denied for user &#39;&#39;@&#39;localhost&#39; to database &#39;mysql&#39;
- Leetcode基础篇30天30题系列之数组:模拟计算法
- Linux MFS分布式文件系统介绍和安装
- nodejs版本控制:nvm use命令失效
- Spring MVC 启动报错
- C++的左值,右值,左值引用,右值引用
- linux 内核数据结构之 avl树.
- 自己动手实现一个html2canvas
- 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书