如果我们同时覆盖hashCode()和equals(),是否会形成Linkedlist?



我在为自定义员工类实现哈希图时遇到问题。

  1. 仅覆盖Hash()

    我只覆盖了hash()员工类。 因此,我为相同的对象获得相同的哈希码值。如果我不覆盖 equals(),那就没问题了吧?因为 Object 类的equals() 比较了引用(我为相等的对象获得了相同的 ref)。无论如何,根据我的逻辑,我永远不会为不同的 emp 对象获得相同的哈希。所以离开equals()就可以了?

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

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

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

最新更新