黑马程序员技术交流社区
标题:
学习Map接口时遇到的问题!!!!!
[打印本页]
作者:
java冬冬
时间:
2013-5-11 12:48
标题:
学习Map接口时遇到的问题!!!!!
本帖最后由 java冬冬 于 2013-5-11 19:25 编辑
为什么覆写equals()方法,就必须覆写hashCode()方法;而覆写hashCode()方法,可以不用覆写equals()方法。求一起为进黑马的同志们帮助解答!!
作者:
李志敏
时间:
2013-5-11 13:07
通常来说,一个类的两个实例对象用equals方法比较的结果相等时,他们的哈希码也必需相等,
但反之则不成立,即equals方法比较的结果不相等可以有相同的哈希码,或者说哈希码相同的两个
对象的equals方法比较结果可以不相等,例如,字符串“BB”和“Aa”的equals方法比较结果肯定不相等
但它们的hashcode方法返回值却相等。
作者:
袁术森
时间:
2013-5-11 13:12
首先要明白 hashmap 集合 存储元素的 原理 为什么 该集合能确保 存储的元素是唯一的 就是因为 当存进一个元素时 就会根据hashCode()算法算出该元素的哈希值 如果哈希值相同的 再进一步 用equals方法来做进一步的判断 如果仍相同 则不存 如果不同就存储 大多情况下 不同的元素哈希值有很小很小的概率相同 所以 了解了这个 问题就迎刃而解了
作者:
白磊
时间:
2013-5-11 13:28
首先,需要重写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不一定要相等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2