当前位置: 首页 > 面试题库 >

java-如果未覆盖hashCode会发生什么?

农星华
2023-03-14
问题内容

假设我创建了一个对象,该对象Employee具有ID,firstName,lastName和email,用于实例变量和相应的setter /
getter方法。如何hashCode(),如果我不重写计算hashCode()Employee时,它存储在集合对象的对象?


问题答案:

如果不重写hashcode(),则集合将使用Object类中的默认实现。即使根据equals()方法它们相等,此实现也会为不同的对象提供不同的值。

一些集合(例如HashSet,HashMap或HashTable)使用哈希码存储其数据并进行检索。如果您未以一致的方式实现hashcode()和equals(),则它们将无法正常运行。

编辑:

按照Javadoc:Object.hashcode()“通常通过将对象的内部地址转换为整数来实现,但是Java(TM)编程语言不需要这种实现技术”。因此,我建议不要依赖特定的实现。有关实现的实际作用,请参见类似问题的答案。



 类似资料:
  • 问题内容: 如果未重写hashCode()方法,那么对Java中的任何对象调用hashCode()的结果是什么? 问题答案: 在HotSpot JVM中,默认情况下会在第一次调用时生成未重载或随机数并将其存储在对象标头中。随后的调用或仅从标头中提取此值。默认情况下,它与对象内容或对象位置没有共同点,只有随机数。此行为由HotSpot JVM选项控制,该选项具有以下可能的值: 0:使用全局随机数发生

  • 我正在开发一个Java中的图形库(https://github.com/aisthesis/java-graph2012 完整的上下文),并且需要覆盖权重边缘类的hashCode(),其中边缘不定向。也就是说,我设置了我的 equals() 覆盖方法,以便对于 2 个加权边 e1 和 e2,如果以下条件之一成立(from() 和 to() 方法返回边的尾部和头顶点),则它们相等: e1.从() =

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

  • 问题内容: 该程序将两个元素都添加到集合中。起初我很震惊,因为在添加设置方法时,调用了equals方法。 但是后来我覆盖了hashCode方法: 然后没有添加。这是令人惊讶的,因为Set和add()方法的Javadoc说它在添加到Set中时仅检查equals()。 这是add()的javadoc: 然后我意识到HashSet被实现为HashMap,并且在地图中,对象的hashCode用作键。因此,

  • 这个问题是关于布尔值而不是布尔值的(但我很想知道两者是否相同)。假设您有一个函数正在对数据执行多次检查,并且在每种情况下它都有特定的响应。您希望函数显示所有无效输入的大小写(以及它们无效的原因),因此您希望检查所有输入(而不仅仅是一个并停止和返回)。使用单个布尔值(如Boolean x=isValidEmail(String email))然后处理它是否无效并在未来的检查中重用x以使您不分配额外的

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