java的hashcode方法重写问题 - 爱问答

(爱问答)

java的hashcode方法重写问题

一般是这样重写的:

>>>>>>>>>>>>>>>>>>>>>>>>>>>

public class Staff {String name, sex, job;int age, num, salary;public Staff(String name, String sex, String job, int age, int num) {super();this.name = name;this.sex = sex;this.job = job;this.age = age;this.num = num;this.salary = salary;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + num;return result;}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>

比如我以后需要用num这个属性作为判断两个staff对象是否一样时我调用重写的hashCode()方法进行判断,我应该可以直接return 对象1的num属性值减去对象2的num属性值就行了啊,为何还要定义result变量和prime变量然后result = prime * result + num;这样多步操作多此一举呢?到底是为了什么?求达人给出解释!

多简单啊,1-2和2-3都等于-1,这俩东西一样么?hashcode是为了进行equal比较的,只有hashcode不重复才能保证key和value全不相等,这是hashMap存在的基础。

以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性

相关标签:java

下一篇:求一个微博博主的名字

上一篇:用手机里的浏览器看新闻时手机QQ是登录着的,那QQ那里会不会有消息或弹窗显示你在看新闻

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?