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

用Java如何实现hashCode()

景永春
2023-03-14
问题内容

hashCode()如何实现?

我的假设是它将对象存储位置用作运行哈希函数的初始数字(种子)。然而,这种情况并非如此。

我还研究了Hash:它在内部如何工作?但它不能回答我的问题。

是的,我可以下载SDK,但是在执行此操作并查看代码之前,也许其他人已经知道了。

谢谢 :)

编辑: 我知道它应该被覆盖等等,所以请尝试保持话题:)


问题答案:

当然,它是特定于实现的,但是通常,对象的哈希码将被延迟计算并存储在对象头中。标头可以使它们变小,同时允许复杂的锁定算法,这很奇怪。

在OpenJDK / Oracle
JVM中,计算初始哈希码的常用方法是基于第一个请求时的内存地址。对象在内存中移动,因此每次使用地址都不是一个好选择。哈希码不是实际的地址-
通常为8的倍数,对于在哈希表中直接使用哈希表(尤其是具有2的幂)而言,这不是很好。注意身份哈希码不是唯一的。

HotSpot具有构建时间选项,可以始终使用零或使用安全随机数生成器(SRNG)进行测试。



 类似资料:
  • 问题内容: 我想实施一个。 我不想只使用,因为我必须实现大量的方法。 可以避免吗? 更具体的,我怎么能流,以及例如: 问题答案: JDK的标准实现是内部类,您不能直接实例化它。 相反,你可以使用,以及各种1,2种静态工厂方法来创建默认实现的实例。 使用分离器可能是最强大的方法,因为它可以让您懒惰地提供对象,同时如果您的源可以分为多个块,则还可以实现有效的并行化。 此外,如果需要实现自己的 有状态中

  • 问题内容: 具体来说,在对象引用相等的情况下,==运算符的作用是什么? 如果在比较时引用对相同的对象地址求值,则比较是否返回true?还是利用两个引用的hashCode值确定对象是否相同? 具体来说,我想知道==操作引用 了JVM管理的哪些数据结构以 进行参考比较。==是否依靠OOP进行参考比较? 对我来说不幸的是,JLS没有定义==运算符必须如何工作。Java API文档没有提及==应该做什么(

  • 我使用PHP处理以下输入:sam 99912222 tom 1112222 harry 12299933 sam edward harry第1到第6行是姓名和电话号码。最后三行是搜索查询,如果姓名不在列表中(没有电话号码,打印未找到),否则输出数据。我的代码如下: 例外输出应为sam=99912222未找到harry=12299933输出为sam=99912222未找到未找到。为什么这些功能不起作

  • 问题内容: 我有一个像这样的通用接口: 此接口具有有限的实例,因此最好将它们实现为枚举值。问题是那些实例具有不同类型的值,因此我尝试了以下方法,但无法编译: 有什么想法吗? 问题答案: 你不能 Java不允许在枚举常量上使用泛型类型。但是,它们允许用于枚举类型: 在这种情况下,你可以做的是为每个泛型类型都拥有一个枚举类型,或者通过将其设为一个类来“伪造”一个枚举: 不幸的是,它们都有缺点。

  • 本文向大家介绍如何用java实现分页查询,包括了如何用java实现分页查询的使用技巧和注意事项,需要的朋友参考一下 1.基本思路 我现阶段的分页查询的实现是基于sql语句的。 构造出相应的a和b就可以查询出想要的数据,在显示在页面上。重点是要构造出当前的页数,就要封装一个javaBean,存储有关分页的基本属性。 这样只需在service层计算想要的页数,并封装基本的信息,在查询出来显示在前端就可

  • 问题内容: 我真的要疯了。我有以下代码: 执行后,我在运行时遇到这些错误,以下是该跟踪- 我已经将phantomjs.exe添加到Windows路径中,将ghostdriver.jar添加为外部库,但是什么也没有… 我想让它工作两天了… 问题答案: 试试这个,对我有用 然后其余的类似。.并且请评论您的观察,祝您有美好的一天:)