首页 > 电脑

java的hashcode方法重写问题

更新时间2018-04-14 04:48:59

一般是这样重写的:

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

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那里会不会有消息或弹窗显示你在看新闻

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