首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >java的hashCode()是确定性的吗?

java的hashCode()是确定性的吗?
EN

Stack Overflow用户
提问于 2013-05-08 15:56:56
回答 2查看 3.9K关注 0票数 8

java的hashCode()是确定性的吗?

我尝试实现一个使用minhashing算法的文档搜索引擎,并使用hashCode对单词进行预散列。是不是同一个词在每次运行时都会得到相同的哈希值?

即使我在不同的机器上运行它(32位与64位),它也会得到相同的哈希吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-08 16:02:45

这取决于您引用的类。因为,基本Object.hashCode实现不是stated in the documentation

类Object定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。)

地址不是确定性的,考虑到有时它们甚至被用作熵源。

但是,例如,String具有如下确定的确定性哈希码:

(图片来自维基百科)

在某些情况下,甚至没有合理的确定性定义来定义哈希码。

票数 11
EN

Stack Overflow用户

发布于 2013-05-08 16:05:23

说到一般的对象:它不是。

但是,如果您专门讨论String,则在String.hashCode()的API中显式指定哈希码计算。

返回此字符串的哈希码。字符串对象的散列代码计算如下

s*31^(n-1) + s1*31^(n-2) + ... + sn-1

使用int算法,其中si是字符串的第i个字符,n是字符串的长度,^表示求幂。(空字符串的哈希值为零。)

换句话说:您应该能够依赖于字符串的hashCode是稳定的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16445094

复制
相关文章
【八股文Java】: Java对象的hashCode()值是可变的吗?发生GC之后会变吗?为什么?hashCode值如何生成?
1、如果Java对象的hashCode()方法重写即自定义hashCode值的实现,参与hash计算的变量一旦被赋值后就不能再改变,hash值与map容器相关,一旦改变,map取值:可能发生业务异常,内存泄漏,OOM异常。
崔认知
2023/10/20
8850
【八股文Java】: Java对象的hashCode()值是可变的吗?发生GC之后会变吗?为什么?hashCode值如何生成?
Java基础篇:什么是hashCode 以及 hashCode()与equals()的联系
hashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列码,可以提高检索的效率,主要用于在散列存储结构中快速确定对象的存储地址,如Hashtable、hashMap中。
全栈程序员站长
2021/04/13
2.3K0
Java基础篇:什么是hashCode 以及 hashCode()与equals()的联系
object.hashcode的作用_java的hashcode方法
Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。
全栈程序员站长
2022/10/04
6740
灵魂拷问:equals()和hashCode()是远房亲戚吗?
在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:Java 的 equals() 和 hashCode() 是远房亲戚吗?像这类灵魂拷问的主题,非常值得深入地研究一下。
沉默王二
2020/03/11
3830
灵魂拷问:equals()和hashCode()是远房亲戚吗?
Quarkus是Java的未来吗?
专为OpenJDK HotSpot和GraalVM量身定制的Kubernetes本机Java堆栈,采用最佳Java库和标准精制而成。
IT大咖说
2020/05/19
3.6K0
Quarkus是Java的未来吗?
浅谈Java中的hashcode方法
  哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:
Java团长
2018/08/06
8240
Hashcode的作用_hashcode实现
根据API文档,java中的hashcode事实上是跟equals是有着密切联系的,hashcode是为了提高哈希表的性能
全栈程序员站长
2022/10/04
6020
Java hashCode()与equals()的关联
一、Hash表数据结构介绍 请参考 哈希表详解 二、equals的内部实现 equals()的定义位于Object.class中: public boolean equals(Object obj) { return (this == obj); } 从这里可以看出,如果不重写的话,equals默认就是断定两个对象的内存地址是否相同。如果内存地址相同,必然是同一个对象;如果内存地址不相同,必然不是同一个对象。 三、hashCode()介绍 (一)hashCode()内部实现 hash
海天一树
2018/04/17
8210
浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:
lyb-geek
2018/08/06
4260
HashMap_java的hashcode方法
MurmurHash可以将一个字符串hash出一个碰撞率极低的long型数值,且效率很高
全栈程序员站长
2022/11/02
1870
[Java基础要义] Java语言中Object对象的hashCode()取值的底层算法是怎样实现的?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://louluan.blog.csdn.net/article/details/41547649
亦山
2019/05/25
7390
hashCode和identityHashCode的区别你知道吗?
hashCode 关于hashCode参考之前的文章,点击参考之前文章。 identityHashCode identityHashCode是System里面提供的本地方法,java.lang.System#identityHashCode。 /** * Returns the same hash code for the given object as * would be returned by the default method hashCode(), * whether or not t
Java技术栈
2018/03/30
8860
hashCode和identityHashCode的区别你知道吗?
hashcode方法实现_java重写hashcode方法
hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。
全栈程序员站长
2022/10/03
8700
细说 Java hashCode
写过 Java 程序的同学一定都知道 hashCode 方法,它是 Object 对象的一个 native 方法。无论是我们平常使用的 HashMap 还是重写 equals 方法的时候,都会接触到 hashCode 方法,那么它究竟是怎么生成的,又有什么作用呢?笔者带着这个疑问开始探寻。
Bug开发工程师
2019/07/12
8510
java中equals,hashcode和==的区别
byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。
Anymarvel
2019/03/04
1.4K0
java中equals,hashcode和==的区别
Java equals 和 hashCode 的这几个问题可以说明白吗?
上一篇文章 如何妙用Spring 数据绑定机制,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 。基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于说明他们二者的关系和约束,于是写本文做单独说明,本篇文章将循序渐进 ( 通过举例,让记忆与理解更轻松 ) 说明这些让你有些苦恼的问题,Let's go .......
用户4172423
2019/12/25
3860
Java equals 和 hashCode 的这几个问题可以说明白吗?
Java hashCode() 方法
在 java.lang.Object 类中有几个个非常重要的方法,我们今天来讨论下 hashCode() 这个方法。
HoneyMoose
2021/04/27
8680
Java hashCode() 方法
Java中的数组是对象吗?
首先说明:Java中的数组是对象,这个可以查看The Java Language Specification SE(4.3.1)可得,另外本文讨论的相关问题的结论,在规范中都能找到,目前也被我总结在了Java漫谈-数组中。
WindCoder
2018/09/19
7.3K1
Java中的数组是对象吗?
java的nio是水平触发吗
java的nio是水平触发吗?在linux上,其实现是基于linux epoll的。所以首先我们要了解epoll。
平凡的学生族
2019/05/25
8590
Java equals 和 hashCode 的这几个问题可以说明白吗?
上一篇文章 如何妙用Spring 数据绑定机制,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 。基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于说明他们二者的关系和约束,于是写本文做单独说明,本篇文章将循序渐进 ( 通过举例,让记忆与理解更轻松 ) 说明这些让你有些苦恼的问题,Let's go .......
Bug开发工程师
2020/03/12
4350
Java equals 和 hashCode 的这几个问题可以说明白吗?

相似问题

Java GC是确定性的吗

30

Java序列化是确定性的吗?

20

java中的String hashCode是预先计算好的吗?

61

Java String: hashcode实际上是hashvalue吗?

14

HashCode.Combine是交换的吗?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文