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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java冬冬 高级黑马   /  2013-5-11 12:48  /  1163 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 java冬冬 于 2013-5-11 19:25 编辑

为什么覆写equals()方法,就必须覆写hashCode()方法;而覆写hashCode()方法,可以不用覆写equals()方法。求一起为进黑马的同志们帮助解答!!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

3 个回复

正序浏览
首先,需要重写hashcode的前提是你得数据的存储时存放在哈希表中的。如果不是这样的话,其实没必要重写hashcode的。

放在HashMap和Hashtable里面如果是作为value而不是作为key的话也是不必重写 hashCode了。至于HashSet,实际上它只是忽略value的HashMap,每次HashSet.add(o)其实就是HashMap.put(o, dummyObject)。HashMap中的key是HashSet来实现的。它的存储方式是用哈希表来存储的。

因为每次get()和put()的时候HashMap既要看equals()是不是true也要看hashcode是不是一致。
每个对象都有一个哈希吗hashcode。相同的对象哈希吗hashcode一定相同,但有相同的哈希吗不一定是相同的对象。那么如果两个对象equals,那么他们的hashCode()必须相等;但hashCode()相等时,equals不一定要相等。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
首先要明白 hashmap 集合 存储元素的 原理 为什么 该集合能确保 存储的元素是唯一的 就是因为 当存进一个元素时 就会根据hashCode()算法算出该元素的哈希值 如果哈希值相同的  再进一步 用equals方法来做进一步的判断 如果仍相同 则不存 如果不同就存储  大多情况下 不同的元素哈希值有很小很小的概率相同 所以 了解了这个 问题就迎刃而解了
回复 使用道具 举报
通常来说,一个类的两个实例对象用equals方法比较的结果相等时,他们的哈希码也必需相等,
但反之则不成立,即equals方法比较的结果不相等可以有相同的哈希码,或者说哈希码相同的两个
对象的equals方法比较结果可以不相等,例如,字符串“BB”和“Aa”的equals方法比较结果肯定不相等
但它们的hashcode方法返回值却相等。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

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