黑马程序员技术交流社区

标题: 关于hashCode方法的疑问。。 [打印本页]

作者: 周四川    时间: 2012-4-13 16:56
标题: 关于hashCode方法的疑问。。
在毕老师的一个视频里,自定义了一个学生对象,在对象里面定义了一个hashCode方法:
public int hashCode()
{
       return name.hashCode()+sum*78;
}
这个方法是干啥使的?里面name.hashCode()+sum*78是什么意思?
知道的麻烦解释下。谢谢。
作者: 薛飞飞    时间: 2012-4-13 17:03
向hashSet存入的元素,要保证如果两个元素equals相等,hashCode也必须相等。
相同元素计算出来的区间号必须一致,否则没机会见面比较,也就去不掉重复的元素了
作者: 石好强    时间: 2012-4-13 17:03
hashCode()方法是来自Object超类,也就是传说中的上帝类。每个对象都具有的,作用是返回该对象的哈希码值。
老师是复写的hashCode,虽然你没有列出所有代码,但是老师这样复写的可能一般都是为了提高 哈希值的唯一性,经过复写,提高复杂性,降低哈希码值重复的可能。

API中说明:
hashCode
public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
作者: 未长法    时间: 2012-4-13 17:07
返回该对象的哈希码值,根据哈希码值判断两个对象是否相等,如果相等的话,再去判断equals() .如果不相等就不用判断equals().
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
public int hashCode()
{
        return name.hashCode()+sum*78;
}
如果返回的是name.hashCode()+sum   虽然两个对象的hashCode不同  但是这个两个对象的的name.hashCode()加上sum 的和有可能相等,所以为了避免这种情况sum*78(任意的数);
作者: 周四川    时间: 2012-4-16 10:30
谢谢大家的回答。。。
前辈们了解的透彻。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2