【发布时间】:2014-09-10 09:35:30
【问题描述】:
我参加了一次面试,面试官问了一个问题
面试官 - 如果我们打算使用这个类的对象作为 HashMap 键,为什么要覆盖一个类的 hashCode 和 equals 方法。
我 - 我已经告诉了他完整的流程。 HashMap 如何在内部使用 hashcode 和 equals 方法(Bucket 逻辑)。
但他对我的回答不满意。他告诉我这只是基本用途,你已经完美地解释了它,但我想知道它的高级重要性不是基本的(他也给了我一些线索 - 它有助于内存管理)。
我在网上搜索过,但没有得到答案。
还有其他重要的吗?如果是的话是什么?
非常感谢链接/文档。
提前谢谢....
【问题讨论】:
-
这很模糊;您想了解关于 HashMaps 的一些事情吗?
-
内存管理?我想知道这意味着什么。
-
@OliCharlesworth 当然,如果 OP 知道面试官的真正意思,那就很模糊了,根本不会有问题 :)
-
@OliCharlesworth 我不想了解 HashMaps。我想知道 hashcode 和 equals 方法是如何负责 HashMap 中的内存管理的。我知道 hashmap 如何在内部使用 hashcode,但还有其他用途吗?
-
@AnkitSharma 我很难想到任何事情。如果您有一个返回常量值的
hashCode()实现,您的HashMap会变成一个相当无效的链表,但您可能知道这一点。我能想到的另一件事是,如果你不覆盖equals()和hashCode(),一切都将在对象标识上完成,所以如果你插入两个具有相同字段的对象,两者都会被添加,消耗更多内存,但这很明显,无论如何也不是很相关。
标签: java memory-management hashmap equals hashcode