重写hashCode中为什么基本都是乘以31
答案:2 悬赏:10 手机版
解决时间 2021-01-23 21:44
- 提问者网友:鐵馬踏冰河
- 2021-01-23 15:41
重写hashCode中为什么基本都是乘以31
最佳答案
- 五星知识达人网友:酒者煙囻
- 2021-01-23 16:22
在JDKAPI文档中建议:重写equals方法时应该重写hashCode方法,重写equals方法时重写hashCode方法是个好习惯。为什么重写equals方法时要重写hashCode?equals方法用于比较是否“相等”,而hashCode则是对象的散列值,是对象的“ID号码”,相等的两个对象应该具有相同的“ID号码”。怎样重写hashCode?重写方法有很多,但都为了一个共同目的:“尽量保证同一个类的不同对象具有不同的hashCode值”。hashCode在JDK主要用于实现java.util包下的哈希表,因为基于hashCode的哈希表具有更好的性能。什么是hashCode?hashCode,具体可百度一下“散列算法”。
全部回答
- 1楼网友:枭雄戏美人
- 2021-01-23 16:49
java面向对象的编程机制中,常常使用equals方法与hashcode方法组合完成对象一致性的逻辑判断。
通常,在需要有对比逻辑的类中,重写equals方法完成自定义的逻辑判断标准。
java约定,如果equals方法返回true,参与对比的两个对象应该完全一致。如果equals返回false,参与对比的两个对象必须不能一致(否则失去意义)。对比时可以参照对象的hashcode值,如果该值不同,则对象必须不同,如果该值相同则对象可能相同,此时需要更深层次的比较。
其次,hashmap对象根据其key的hashcode来获取对应的value。
在重写父类的equals方法时,也重写hashcode方法,使相等的两个对象获取的hashcode也相等,这样当此对象做map类中的key时,两个equals为true的对象其获取的value都是同一个,比较符合实际。
这种逻辑就好比,判断两个人是否是一个人时,不需要比对身上的任何一个细胞。而先确定其性别就可。性别不一致的,肯定不是同一个人,而性别一致的,不能够确定是同一个人,需要做其他的判断。
所以程序员应该意识到,为不相等的对象生成不同哈希值可以提高程序的性能(不需要深层对比)。
楼主可能也没有接触到hashmap,map,set,key,value等概念,建议先去摸索一下这些东西,再结合起来理解。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
正方形一边上任一点到这个正方形两条对角线的 |
阴历怎么看 ? |