【发布时间】:2020-10-29 11:12:39
【问题描述】:
HashMap 是否使用键或值的hashCode 和equals 方法来存储其条目,即我们需要覆盖其hashCode 和equals 方法的类?应该是键的类(K)还是值的类(V)?
【问题讨论】:
-
您需要覆盖键的 hashCode,因为映射使用键的哈希码来存储每个条目。
-
HashMap 是否使用键或值的hashCode 和equals 方法来存储其条目,即我们需要覆盖其hashCode 和equals 方法的类?应该是键的类(K)还是值的类(V)?
【问题讨论】:
该值本质上与 Map 本身无关:它只是 HashMap 在决定将键/值对放在其内部数据结构中的哪个位置时考虑的键。
但是,您可能也想为该值覆盖它,例如如果你需要做map.values().contains(...)。
【讨论】:
您的键类需要对 hashCode 和 equals 进行适当的覆盖。
键的哈希码决定了一个对象应该放在哪个哈希桶中。
key 的 equals 方法可以让你区分碰巧散列到同一个桶的键。
【讨论】: