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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨强 黑马帝   /  2011-10-28 01:18  /  1611 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用hashCode()方法
不同的对象会出项相同的hashCode吗  如何避免

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

3 个回复

倒序浏览
绿影 黑马帝 2011-10-28 01:35:47
沙发
重写hashcode时可以如下方式:
public int hashCode()
  {   
   final int NUM = 38;//随意搞一个数
   return name.hashCode() + age*NUM;//乘以一个数降低重复
  }

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
fso918 黑马帝 2011-10-28 08:44:17
藤椅
hashcode从原则上说是必须是一个唯一值,但现实中对象太多,int型数据个数有限,无法给每一个对象都分配一个唯一的hashcode,所以必然有重码出现。
如果两个对象hashcode相同,就要调用equals方法来判断是否是同一个对象。
关键是要理解什么是散列技术。原理清楚了,就知道hashcode是用来干什么的了。
回复 使用道具 举报
吉许 黑马帝 2011-10-28 09:16:40
板凳
你提到不同的对象会产生相同的hashcode吗?主要目的就是为了比较两个对象是不是相等。
equals()相等的两个对象,hashcode()一定相等;
equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。为了降低重复可以向上面说的乘以一个任意数。
hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。

具体我参见了http://www.iteye.com/topic/257191这篇文章,java中hashcode()和equals()的详解,讲的比较透彻。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马