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()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性
热门标签: