name.hashCode是调用了name的哈希值,为什么要调用呢?是因为同时出现两个人的年龄相同时,这时就要判断姓名是否相同,而姓名是字符串型的,hashCode的返回值是int型的,所以就要将name转成int型直接调用name的哈希值加上年龄就OK了。
至于乘以39是为什么呢?这是特殊情况,举个例,假如有两个人,一个张三40岁,一个李四20岁,算出来的哈希值恰好相同,就有一个人就存不进去,明明这两个人却姓名不一样,年龄也不一样,这时候让年龄乘以一个数就整数,这个整数就可以随便定义,但是这个数不能过大或者是1,过大会超出int型范围,等于1结果还是一样,就白乘了。
其实应该把这个整数修饰为常量。
public int hashCode()
{
final int NUMBER = 39;
return name.hashCode()+age*NUMBER;
}
|