0

我已经创建了哈希映射,当我调试它时,我看到我有重复的键。我没有覆盖键中的hashCode()& equals(Object obj)-Object1 我想知道它将如何影响地图搜索的性能?

private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
4

4 回答 4

4

在 Map 中不可能有重复的键,您有不同的键“出现”相同(可能基于它们的toString()?),因为您没有覆盖equals()and hashCode(),但实际上键是不同的。

这意味着为了从您的 Map 中获取所有值,您需要保留您创建的每个键并将其存储在某个地方,这对我来说违背了 Map 的目的。

概括:

覆盖equals()and hashCode(),然后将您的键/值对放入 Map 中。

于 2012-12-20T16:16:44.067 回答
0

你怎么会有重复的键?你也没有覆盖,所以你equals()不能hashcode()说“重复的对象”,因为这正是这些方法的目的。您可能调试并看到了不同的值,但对于 JVM,它们不等于基于默认值Object.equals()Object.hashcode()(实际上是最接近的超类)

于 2012-12-20T16:21:12.210 回答
0

它不会真的给你带来糟糕的表现(更多的是相反),但它会防止你的对象被视为重复。

如果您希望将每个实例视为不同的键,请不要覆盖 equals 和 hashCode 方法。但这意味着您需要完全相同的实例来检索地图中的值。

如果您想使用不同的实例(例如具有相同的 id)检索值,那么您需要覆盖这些方法。

但问题并不是真正的性能问题。

于 2012-12-20T16:13:07.160 回答
0

您不能有重复的键,但可以有重复的值。可能是您对键和值感到困惑。

于 2012-12-20T17:25:58.180 回答