age*39 这个39 不是固定的 只要不是1 的数都可以
1.在存数据到Set集合时 要保证数据的唯一性
2.先执行hashCode方法 在执行equals方法
3.hashCode方法是根据底层的哈希算法 来返回一个哈希值
4.假如有两个元素是同一个name 调用了hashCode方法得到一个值是相等的 这时就要调用equals方法来比较
他们的age是不是一样
5.当调用hashCode方法是返回的哈希值不一样 就不用继续调用equals方法了
方法一:public int hashCode()
{
System.out.println(this.name+"....hashCode");
return name.hashCode();
}
如果元素的name一样他们就会继续调用equals方法
方法二:
public int hashCode()
{
System.out.println(this.name+"....hashCode");
return name.hashCode()+age*39;
}
当name相同时再加上他们的age作比较 如果还想到的话就说明这两元素是同一个 就不用继续调用equals方法了这样提高了效率
age*39 原因是: name1=2 age1=5 而name2=5 age=2 虽然他们不是同一个元素但是他们在调用了方法二后返回的哈希值是相等的 为了避免这种错误的情况发生 所以在age上乘一个数
|