对于 HashMap,我应该为键或值覆盖 hashCode 吗?
For HashMap, should I override hashCode for key or value?
HashMap
是否使用键或值的 hashCode
和 equals
方法来存储其条目,即 class 的 hashCode
和 equals
我们需要覆盖的方法?应该是键的class(K
),还是值的class(V
)?
该值本质上与 Map 本身无关:它只是 HashMap
在决定将 key/value 对放入其内部数据结构中的位置时考虑的唯一键。
但是,您可能也想覆盖它的值,例如如果你需要做 map.values().contains(...)
.
您的密钥 class 需要对 hashCode 和 equals 进行适当的覆盖。
key的哈希码决定了一个对象应该放在哪个哈希桶中。
key 的 equals 方法允许您区分碰巧散列到同一个桶的键。
HashMap
是否使用键或值的 hashCode
和 equals
方法来存储其条目,即 class 的 hashCode
和 equals
我们需要覆盖的方法?应该是键的class(K
),还是值的class(V
)?
该值本质上与 Map 本身无关:它只是 HashMap
在决定将 key/value 对放入其内部数据结构中的位置时考虑的唯一键。
但是,您可能也想覆盖它的值,例如如果你需要做 map.values().contains(...)
.
您的密钥 class 需要对 hashCode 和 equals 进行适当的覆盖。
key的哈希码决定了一个对象应该放在哪个哈希桶中。
key 的 equals 方法允许您区分碰巧散列到同一个桶的键。