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

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

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

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

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

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

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

最新文章

  1. 关于lwip移植到ucsos-ii平台的遇到的问题(一)
  2. Linux 服务器的网络配置 - 2. 查看 Linux 服务器的进程
  3. bootstrap学习笔记<一>(bootstrap用法)
  4. [css] 垂直居中方法
  5. 快速构建express项目
  6. EasyUI 在aspx页面显示高度不正常解决办法
  7. Linux下安装mysql-5.6.4 的图文教程
  8. SSL 通信原理及Tomcat SSL 配置
  9. 【转】CTS tests 4.2_r4
  10. PHP MySQL Select 之Select
  11. 全屏显示网页FULLSCREEN API
  12. Paper藐小之处明察秋毫故时有物外之趣
  13. 【干货】提取图片元数据之exiftool
  14. 测试工具之badboy
  15. JavaScript有这几种测试
  16. MySQL数据库-表内容操作
  17. windows下vscode修复c++找不到头文件
  18. 集合框架map_DAY18
  19. bzoj1650
  20. Ubantu apt source 国内

热门文章

  1. cmd命令简单别木马的蛛丝马迹
  2. 【转载】ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
  3. Leetcode基础篇30天30题系列之数组:模拟计算法
  4. Linux MFS分布式文件系统介绍和安装
  5. nodejs版本控制:nvm use命令失效
  6. Spring MVC 启动报错
  7. C++的左值,右值,左值引用,右值引用
  8. linux 内核数据结构之 avl树.
  9. 自己动手实现一个html2canvas
  10. 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书