我已经创建了哈希映射,当我调试它时,我看到我有重复的键。我没有覆盖键中的hashCode()
& equals(Object obj)
-Object1
我想知道它将如何影响地图搜索的性能?
private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
我已经创建了哈希映射,当我调试它时,我看到我有重复的键。我没有覆盖键中的hashCode()
& equals(Object obj)
-Object1
我想知道它将如何影响地图搜索的性能?
private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
在 Map 中不可能有重复的键,您有不同的键“出现”相同(可能基于它们的toString()
?),因为您没有覆盖equals()
and hashCode()
,但实际上键是不同的。
这意味着为了从您的 Map 中获取所有值,您需要保留您创建的每个键并将其存储在某个地方,这对我来说违背了 Map 的目的。
概括:
覆盖equals()
and hashCode()
,然后将您的键/值对放入 Map 中。
你怎么会有重复的键?你也没有覆盖,所以你equals()
不能hashcode()
说“重复的对象”,因为这正是这些方法的目的。您可能调试并看到了不同的值,但对于 JVM,它们不等于基于默认值Object.equals()
和Object.hashcode()
(实际上是最接近的超类)
它不会真的给你带来糟糕的表现(更多的是相反),但它会防止你的对象被视为重复。
如果您希望将每个实例视为不同的键,请不要覆盖 equals 和 hashCode 方法。但这意味着您需要完全相同的实例来检索地图中的值。
如果您想使用不同的实例(例如具有相同的 id)检索值,那么您需要覆盖这些方法。
但问题并不是真正的性能问题。
您不能有重复的键,但可以有重复的值。可能是您对键和值感到困惑。