重写equals方法的同时为什么要重写hashcode方法
2014-04-17 20:06
417 查看
首先我们根据图示来分析一下HashMap中add方法的源代码
从上面的分析过程我们能看出将一个(key,value)加入map中其实仅仅与key有关,而且在加入过程中首先使用到了hashcode然后使用了equals,所以说如果equals表示了两个对象的相等关系却没有保证其hashcode也相等就会出现在hashmap中加入了两个相等的key的情况,这也就是为什么在重写equals的同时一定要重写hashcode的根本原因。
如果研究get方法的源码也同样会发现与普通相似的处理算法。
不论是直接还是间接使用了HashMap HashTable(注意HashSet底层就是使用了一个HashMap),都必须在重写equals的同时重写hashcode。
从上面的分析过程我们能看出将一个(key,value)加入map中其实仅仅与key有关,而且在加入过程中首先使用到了hashcode然后使用了equals,所以说如果equals表示了两个对象的相等关系却没有保证其hashcode也相等就会出现在hashmap中加入了两个相等的key的情况,这也就是为什么在重写equals的同时一定要重写hashcode的根本原因。
如果研究get方法的源码也同样会发现与普通相似的处理算法。
不论是直接还是间接使用了HashMap HashTable(注意HashSet底层就是使用了一个HashMap),都必须在重写equals的同时重写hashcode。
相关文章推荐
- Python 初学笔记:Socket网络编程
- VS 2008 OpenGL+glfw+glew+glm 配置
- 经典SQL--求一年有多少天
- 01背包问题-状态d[i][j],f[i][j],滚动数组--java实现
- iOS虚拟键盘上添加动态按钮
- HDU2444(最大匹配)
- opencv之cvLoadImage的使用
- H - Windmill Animation
- 图像特征提取LBP
- java多态
- Huffman编码
- Leetcode: Search a 2D Matrix 理解分析
- 学习maven的使用,看到一篇很实用的入门教程 .
- ccd和cmos的区别
- 发票语音查询系统的简介
- 给面板添加背景图片
- C#-电影院简单售票系统-Console App---ShinePans
- 很全的ArrayList用法
- 经典模拟问题--约瑟夫环 POJ--3750
- 证明不是哈密顿图的几种方法归纳总结