我在为自定义Employee类实现hashmap时遇到了问题。
仅覆盖Hash()
我只覆盖了员工班级hash()
。所以,我得到相同对象的相同哈希码值。如果我不重写equals(),那么它会好吗?因为对象类的equals(
)比较了引用(我为相同的对象获得了相同的ref)。无论如何,根据我的逻辑,我永远不会为不同的emp对象获得相同的哈希。那么离开equals()
?
如果我们覆盖Equals()
和hashcode()
,那么我们将始终拥有唯一的价值?所以不可能将Linkedlist放在一个桶位置?
当我们覆盖equals()时,在第一行我们将总是给出(this == o)。在这种情况下,即使在覆盖hashcode()之后,如果我获得2 diff员工对象的相同哈希码,如果返回相同的哈希码,第一行将始终得到满足。那么在equals()中使用剩余逻辑有什么用?
答案 0 :(得分:0)
对于两个对象,您可以使用相同的哈希码和不同的等号。哈希码不必是唯一的。即使所有对象都返回相同的哈希码,如果不会破坏逻辑,但当然在性能方面效率低下。 相反的当然是禁止两个等于但具有不同哈希码的对象将导致不一致。不良行为的示例:您可以将对象放在HashMap中,但是当您检索同一个对象(一个等于第一个对象的对象)时,您将无法获取它,因为它具有不同的哈希码。