当前位置: 首页 > 知识库问答 >
问题:

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

王曜文
2023-03-14

我在为自定义员工类实现hashmap时有问题。

>

我只重写了employee类的hash()。所以,对于相同的对象,我得到相同的hashcode值。如果我不重写equals(),那就没问题了,对吧?因为object类的equals()比较了引用(在这里,我得到了相同的引用来表示相等的对象)。无论如何,根据我的逻辑,我永远不会为不同的emp对象得到相同的哈希值。所以,让等于()?

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

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


共有1个答案

欧阳正谊
2023-03-14

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

 类似资料:
  • 我试图覆盖提到的方法为我的: MyObject: 如何重写hashcode(),equals()和compareTo()方法? 目前我有以下几点: 我读到通过id比较是不够的,这是对象是数据库的持久实体(见这里)。 此类型的所有对象的名称和编号不是唯一的。 那么我应该如何覆盖它呢? 我还需要比较它里面的hashMap吗? 我很困惑。该对象唯一独特的地方是map myMap,它将在生命周期的后期填充

  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 问题内容: 如果我有 如果我比较A的2个实例但没有覆盖equals方法,是否可以获得预期的结果? 问题答案: 如果我比较A的2个实例但没有覆盖equals方法,是否可以获得预期的结果? 这取决于您的期望:) 默认实现将为您提供 引用相等性-换句话说,当您比较两个引用时,仅当它们是对同一对象的引用时才返回true。 通常,您将重写以实现“值相等”,在这种情况下,两个不同的对象通常被认为具有相等的字段

  • 在阅读了大量文档和文章后,我真的对和方法感到非常困惑。主要是,有各种各样的例子和用法让我太困惑了。 那么,你能澄清一下以下几点吗? 1? 2.如果有一个唯一的键,例如,那么我们应该只使用这个字段吗?或者我们应该将它与组合,如下所示? 3.naturaid怎么样?据我所知,它用于唯一字段,例如,<代码>私有字符串isbn 。它的用途是什么?它是否与方法有关?

  • 问题内容: 假设我创建了一个对象,该对象具有ID,firstName,lastName和email,用于实例变量和相应的setter / getter方法。如何,如果我不重写计算中时,它存储在集合对象的对象? 问题答案: 如果不重写hashcode(),则集合将使用Object类中的默认实现。即使根据equals()方法它们相等,此实现也会为不同的对象提供不同的值。 一些集合(例如HashSet,

  • 我们正在编写一个类,它需要非常复杂的逻辑来计算equals()和hashCode()。类似于: