【问题标题】:Should I override equals() and hashCode() for String key in HashMap, Java?我应该覆盖 Java HashMap 中 String 键的 equals() 和 hashCode() 吗?
【发布时间】:2016-05-23 09:59:53
【问题描述】:

我正在使用HashMap<String, MySuperClass> 集合,其中密钥为String 格式。一般来说,为了使用HashMap集合,需要覆盖equals()hashCode()

我想澄清一下,我是否应该为StringIntegerHashMap 中的其他“原始”类覆盖equals()hashCode()

【问题讨论】:

  • 嗯? StringInteger 是已经有 equalshashCode 的内置类。
  • 是的,这就是问题的原因。在某些地方,我读到StringInteger 没有必要,但在其他地方人们也为这些类实现equals()hashCode()。所以,我想澄清这一刻。
  • "在其他地方人们为这些类实现equals()hashCode()"在哪里?
  • @MikeB。该代码覆盖了地图的equals方法,而不是String的equals方法......

标签: java hashmap guava equals hashcode


【解决方案1】:

没有。 Strings(和Integers)已经实现了equalshashCode,你无法为它们重写它,因为这些类是final,因此不可扩展。

【讨论】:

    【解决方案2】:

    当您使用类作为HashMap(或HashSet,或Hashtable)的键时,您应该确保它覆盖hashCode()equals(Object)。 JDK 的String、原始包装器(如IntegerLong 等)和许多其他已经为您完成了这项工作,因此您无需担心。

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多