【问题标题】:For HashMap, should I override hashCode for key or value?对于 HashMap,我应该覆盖键或值的 hashCode 吗?
【发布时间】:2020-10-29 11:12:39
【问题描述】:

HashMap 是否使用键或值的hashCodeequals 方法来存储其条目,即我们需要覆盖其hashCodeequals 方法的类?应该是键的类(K)还是值的类(V)?

【问题讨论】:

  • 您需要覆盖键的 hashCode,因为映射使用键的哈希码来存储每个条目。

标签: java hashmap hashcode


【解决方案1】:

该值本质上与 Map 本身无关:它只是 HashMap 在决定将键/值对放在其内部数据结构中的哪个位置时考虑的键。

但是,您可能也想为该值覆盖它,例如如果你需要做map.values().contains(...)

【讨论】:

    【解决方案2】:

    您的键类需要对 hashCode 和 equals 进行适当的覆盖。

    键的哈希码决定了一个对象应该放在哪个哈希桶中。

    key 的 equals 方法可以让你区分碰巧散列到同一个桶的键。

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多