【问题标题】:whether Linkedlist will be formed if we override both hashCode() and equals()?如果我们同时覆盖 hashCode() 和 equals(),是否会形成 Linkedlist?
【发布时间】:2018-07-13 22:31:28
【问题描述】:

我在为自定义 Employee 类实现 hashmap 时遇到问题。

  1. 仅覆盖Hash()

    我只覆盖了员工类的hash()。所以,我得到相同对象的相同哈希码值。如果我不覆盖equals(),那会很好吗?因为对象类的equals() 比较了引用(对于相等的对象,我得到了相同的引用)。无论如何,根据我的逻辑,我永远不会为不同的 emp 对象获得相同的哈希值。所以留下equals()就好了?

  2. 如果我们同时覆盖Equals()hashcode(),那么我们将始终拥有唯一值吗?那么就不可能在单个存储桶位置获取 Linkedlist 了吗?

  3. 当我们覆盖 equals() 时,在第一行我们将始终给出 (this == o)。在这种情况下,即使在覆盖 hashcode() 之后,如果我为 2 个不同的员工对象获得相同的哈希码,如果返回相同的哈希码,第一行将始终得到满足。那么在equals()中剩下的逻辑有什么用呢?

【问题讨论】:

    标签: list overriding equals hashcode


    【解决方案1】:

    两个对象可以有相同的哈希码和不同的等号。哈希码不必是唯一的。即使所有对象都返回相同的哈希码,如果不会破坏逻辑,但在性能方面当然会效率低下。 反之当然是禁止两个对象相等但哈希码不同会导致不一致。不良行为示例:您可以将一个对象放在 HashMap 中,但是当您检索相同的对象(等于第一个对象)时,您将不会得到它,因为它具有不同的哈希码。

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多