黑马程序员技术交流社区

标题: 不明白的一点(Map中得HashCode的问题) [打印本页]

作者: 李爱霞    时间: 2011-12-31 10:51
标题: 不明白的一点(Map中得HashCode的问题)
本帖最后由 李爱霞 于 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的值为什么就不一定相等呢?郁闷
那位高手能不能给解析一下。。谢谢啦

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

作者: 李爱霞    时间: 2011-12-31 11:15
常兆鹏 发表于 2011-12-31 11:08
你也知道Map会根据不同的hashCode()来放在不同的桶里面。也就是说hashcode就相当于桶,而equals是桶里的具 ...

谢谢!很油道理额
作者: 常兆鹏    时间: 2011-12-31 15:16
李爱霞 发表于 2011-12-31 11:15
谢谢!很油道理额

:handshake




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