永发信息网

重写hashCode中为什么基本都是乘以31

答案:2  悬赏:10  手机版
解决时间 2021-01-23 21:44
重写hashCode中为什么基本都是乘以31
最佳答案
在JDKAPI文档中建议:重写equals方法时应该重写hashCode方法,重写equals方法时重写hashCode方法是个好习惯。为什么重写equals方法时要重写hashCode?equals方法用于比较是否“相等”,而hashCode则是对象的散列值,是对象的“ID号码”,相等的两个对象应该具有相同的“ID号码”。怎样重写hashCode?重写方法有很多,但都为了一个共同目的:“尽量保证同一个类的不同对象具有不同的hashCode值”。hashCode在JDK主要用于实现java.util包下的哈希表,因为基于hashCode的哈希表具有更好的性能。什么是hashCode?hashCode,具体可百度一下“散列算法”。
全部回答
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等概念,建议先去摸索一下这些东西,再结合起来理解。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单选题下列说法或推断正确的一组是①玻璃是氧
免费取名字网站
戴尔台式电脑和联想台式电脑哪个好
读“长江、黄河示意图”,完成下列各题.(1
怎么才能让秸杆变成天然气
纬度49、289(N)经度89、2492(E)
赛拉图用什么机油?
王大爷在一块长15米,宽6米的菜地种油菜,如
三国演义中的外貌描写
单选题下列关于突变与进化的关系,说法正确的
响水县地税局地址在什么地方,想过去办事
恶魔城暗黑诅咒问题~~~~~
请问AFP金融理财师好考吗?
s7三星为什么没有4g
梦见开光崖柏的手串断了
推荐资讯
学生应不应该使用手机议论文
Sometimes teens need to have some time awa
美之然女子美容会所地址在什么地方,我要处理
单选题关于人类遗传病的叙述正确的是A.镰刀型
单选题“入国问禁,入乡问俗”体现的辩证唯物
千信汽车修配厂地址在哪,我要去那里办事
程溪派出所地址在什么地方,我要处理点事
在地图上确定方向:有指向标的地图,指何标箭
单选题关于降水分布的叙述正确的是A.南北纬30
保定恒兴中西医结合医院地址在什么地方,想过
解答题质量为m的木块放在质量为M的木板上,如
dell声卡驱动安装不上 显示不受此IDT软件程序
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?