[英]Why should I override hashCode() when I override equals() method?
[英]why should I override equals and hashcode method for following scnerio
为什么我需要重写以直接访问Hash映射中的值。也就是说,如果按照HashMap将数据插入到hashmap中,则可以通过将Key设置为Integer来获取值,而将Object用作Value。在这种情况下,必须重写equals()和hashCode()方法?请提出建议。
不,您不需要重写任何内容即可将对象用作HashMap
的值 。
仅密钥需要具有有效的hashCode()
。
但是,如果要使用Map#containsValue
, List#indexOf
或Collection#contains
类的东西,则需要实现这两种方法(从技术上讲,这仅是equals
,但实际上这两个是一个集合)(并且这些方法不应仅使用引用)身份)。
当您想从hashTable中检索特定的elem时,可以使用hashCode()
来搜索它。 hashCode()
不必区分。 实际上,您可以为所有实例返回相同的整数,但是,elems存储在列表中而不是hashTable中,这将导致性能问题。
缺省情况下,JVM的hashCode()
(这是子类的Object
的实现,范围从扩展)根据对象的内存地址返回一个整数,因此这足够了,但是JVM标准不需要此实现。 。
默认情况下(Class object
),equals()的实现将返回true
并且仅当它们具有相同的引用时才返回true
,即obj1 == obj2
。 读这个
请记住:
hashCode()
hashCode()
不需要彼此相等。 我认为在大多数情况下(不需要从其他Class继承),不需要重写hashCode()
,因为现代JVM对您来说做得很好。
因此结论是:
如果您的超类已覆盖hashCode()
和equals()
方法,则应覆盖它们,或者至少应看一下实现,并决定是否应覆盖它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.