为什么我需要覆盖直接访问Hash map中的值。也就是说,如果按照HashMap将数据插入到hashmap中,我可以通过将Key作为Integer来获取值,将Object作为Value。在这种情况下是它覆盖equals()和hashCode()方法需要什么?请给出建议。
答案 0 :(得分:1)
不,您不需要覆盖任何内容以将对象用作HashMap
中的值。
只有键需要有效hashCode()
。
但是,您需要实现这两种方法(技术上只有equals
,但如果您想使用Map#containsValue
,List#indexOf
或{ {1}}(这些不应该只是使用引用标识)。
答案 1 :(得分:-1)
hashCode()
用于搜索特定元素。 hashCode()
不必是明确的。实际上,您可以为所有实例返回相同的整数,但是,elems存储在列表而不是hashTable中,并且会导致性能问题。
默认情况下,JVM的hashCode()
(它是Object
的子类到子区的实现)会根据对象的内存地址返回一个整数,所以这应该是足够了,但JVM标准并不要求这个工具。
默认情况下(类object
),equals()的实现将返回true
,并且仅当它们具有相同的引用时才返回true
,即obj1 == obj2
。 read this
请记住:
hashCode()
hashCode()
的人不需要彼此相等。我认为在大多数情况下不需要覆盖hashCode()
(不是从其他类扩展),因为现代JVM已经完成了
对你很好。
所以结论是:
如果你的超级类覆盖了hashCode()
和equals()
方法,那么你应该覆盖它们,或者至少看看实现,并决定是否应该覆盖它们。