A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周四川 中级黑马   /  2012-4-13 16:56  /  2321 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在毕老师的一个视频里,自定义了一个学生对象,在对象里面定义了一个hashCode方法:
public int hashCode()
{
       return name.hashCode()+sum*78;
}
这个方法是干啥使的?里面name.hashCode()+sum*78是什么意思?
知道的麻烦解释下。谢谢。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
向hashSet存入的元素,要保证如果两个元素equals相等,hashCode也必须相等。
相同元素计算出来的区间号必须一致,否则没机会见面比较,也就去不掉重复的元素了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
hashCode()方法是来自Object超类,也就是传说中的上帝类。每个对象都具有的,作用是返回该对象的哈希码值。
老师是复写的hashCode,虽然你没有列出所有代码,但是老师这样复写的可能一般都是为了提高 哈希值的唯一性,经过复写,提高复杂性,降低哈希码值重复的可能。

API中说明:
hashCode
public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
返回该对象的哈希码值,根据哈希码值判断两个对象是否相等,如果相等的话,再去判断equals() .如果不相等就不用判断equals().
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
public int hashCode()
{
        return name.hashCode()+sum*78;
}
如果返回的是name.hashCode()+sum   虽然两个对象的hashCode不同  但是这个两个对象的的name.hashCode()加上sum 的和有可能相等,所以为了避免这种情况sum*78(任意的数);

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
谢谢大家的回答。。。
前辈们了解的透彻。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马