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

时间:2018-02-03 16:11:24

标签: list override equals hashcode

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

  1. 仅覆盖Hash()

    我只覆盖了员工班级hash()。所以,我得到相同对象的相同哈希码值。如果我不重写equals(),那么它会好吗?因为对象类的equals()比较了引用(我为相同的对象获得了相同的ref)。无论如何,根据我的逻辑,我永远不会为不同的emp对象获得相同的哈希。那么离开equals()

  2. 就没问题了
  3. 如果我们覆盖Equals()hashcode(),那么我们将始终拥有唯一的价值?所以不可能将Linkedlist放在一个桶位置?

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

1 个答案:

答案 0 :(得分:0)

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