hashcode 修改的使用时机:
在每改写equals方法,就要改写hashcode方法。如果不改写的话,会导致该类无法与所有基于散列值(hash)的集合类结合在一起正常工作,这样的集合包括hashMap,hashSet和hashtable.
如果我们定义的类不会和java集合类产生关系,那么我们完全没有必要在重写equals()方法的时候来重写hashcode()方法。但出于规范,还是最好用ide直接生成。
编写hashcode的方法:
-
把某个非零常数值(如17)保存在一个叫result的int类型的变量中;
-
对于对象中每个关键字域f(指equals方法中考虑的每一个域),完成以下步骤:
-
为该域计算int类型的散列码c:
-
如果该域是bloolean类型,则计算(f?0:1)
-
如果该域是byte,char,short或int类型,则计算(int)f
-
如果该域是long类型,则计算(int)(f^(>>>32))
-
如果该域是float类型,则计算Float.floatToIntBits(f)
-
如果该域是double类型,则计算Double.doubleToLongBits(f)得一long类型值,然后按前述计算此long类型的散列值
-
如果该域是一个对象引用,则利用此对象的hashCode,如果域的值为null,则返回0
-
如果该域是一个数组,则对每一个数组元素当作单独的域来处理,然后安下一步的方案来进行合成
-
利用下面的公式将散列码c 组合到result中。
result=37*result+c;
hashMap 与 hashtable:判断key是否相同的条件都是hashcode()相同&&满足equals() 。
分享到:
相关推荐
Servlet基础补充案例 习题.doc
该资源是java基础教程的补充案例,除去书里本带有的教程联系,额外的java基础练习,对初学者颇有帮助,其并配有题目,解题思路,以及代码,实现界面,可以一定得起到学习的作用。
数据基础补充练习.py
单片机的相关基础补充,通过这份文档,将一些平时会忽略的知识点进行补充
mysql基础补充4-字符集问题
mysql基础补充3-存储引擎问题
计算机基础补充知识点.pdf
计算机基础补充练习题校过.pdf
JAVA基础补充(18)-NET
AutoCAD基础补充功能学习教案.pptx
AutoCAD基础补充功能PPT学习教案.pptx
AutoCAD基础补充功能PPT教学课件.pptx
mysql基础补充2-用户登录和权限问题-详细笔记文档总结
自动控制理论数学基础补充PPT课件.pptx
计算机汇编语言基础补充PPT学习教案.pptx
JAVA基础补充(0)-原码反码补码
JAVA基础补充-两人的QQ聊天系统
JAVA基础补充-展示某磁盘或某目录下的信息
mysql基础补充1-root用户登密码找回问题-详细笔记文档总结
第8节:基础补充-对抗生成网络架构原理与实战解析.zip