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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李爱霞 黑马帝   /  2011-12-31 10:51  /  2745 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李爱霞 于 2011-12-31 14:23 编辑

hashCode()方法使用来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的桶里面,Map在搜索一个对象的时候先通过hashCode()找到相应的桶,然后再根据equals()方法找到相应的对象.要正确的实现Map里面查找元素必须满足一下两个条件:
(1)当obj1.equals(obj2)为true时obj1.hashCode()   ==   obj2.hashCode()必须为true----这一点我能理解
(2)当obj1.hashCode()   !=   obj2.hashCode()为true时obj.equals(obj2)必须为true ------这一点就弄不明白了?这是为什么呢?为什么equals比较为true了,而hashCode的值为什么就不一定相等呢?郁闷
那位高手能不能给解析一下。。谢谢啦

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

4 个回复

倒序浏览
你也知道Map会根据不同的hashCode()来放在不同的桶里面。也就是说hashcode就相当于桶,而equals是桶里的具体事物。
问题是桶里可能会有多个不同的事物(hashcode相同,equals不同),而且不同的桶里也可能有相同的事物,所以equals为true了 hashcode不一定相等。
hashcode相等只能保证两个对象在一个HASH表里的同一条HASH链上,继而通过equals方法才能确定是不是同一对象,如果结果为true, 则认为是同一对象不在插入,否则认为是不同对象继续插入。
我也是新手,这只是我自己的理解...

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
常兆鹏 发表于 2011-12-31 11:08
你也知道Map会根据不同的hashCode()来放在不同的桶里面。也就是说hashcode就相当于桶,而equals是桶里的具 ...

谢谢!很油道理额
回复 使用道具 举报
李爱霞 发表于 2011-12-31 11:15
谢谢!很油道理额

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马