草庐IT

hashCodes

全部标签

Java中为什么重写equals()也需要重写hashCode()?

所有类默认继承Object类先看一下Object源码packagejava.lang;publicclassObject{ //默认调用本地的hashcode()方法根据内存地址生成hash值避免不了哈希冲突 publicnativeinthashCode(); //默认调用的equals方法比较的是'=='比较 //基本类型比较的是两者的值是否相同而引用类型比较两者的是引用地址(对象)是否相同 publicbooleanequals(Objectobj){ return(this==obj);}}结论equals()返回结果为truehashCode()一定相同'=='结果为truehas

巨坑: Java中Enum的HashCode在不同JVM返回结果不一样?

在Java中,Enum是一种特殊的数据类型,用于定义一组常量。Enum常常被用于表示有限的、预定义的选项。然而,在分布式系统中,使用Enum的HashCode可能引发一些问题。本文将详细介绍Enum的HashCode在分布式系统中存在的问题,并提供相应的示例代码、输出和解析。Enum和HashCode简介:Enum是一种特殊的类,它表示一组常量。每个Enum常量都是Enum类的实例对象,并且具有唯一的名称和值。HashCode是Java中Object类的方法之一,用于计算对象的哈希码值。HashCode方法通常与equals方法一起使用,用于判断两个对象是否相等。Enum的HashCode问题

c++ - 使 std 的数据结构默认使用我现有的非静态哈希函数 "hashCode()"

我有一个中等大小的代码库(>200.cpp),它使用函数hashCode()返回哈希值:-classB01{//aclass//.....complexthing....public:size_thashCode(){/*hashalgorithm#H01*/}};classB02{//justanotherunrelatedclass//.....complexthing....public:size_thashCode(){/*#H02*/}//Thisisthesamenameasabove};我已经在不同的地方使用过它,例如在我的自定义数据结构中。它运行良好。现在,我想让std

17、有没有可能两个不相等的对象有相同的hashcode

有没有可能两个不相等的对象有相同的hashcode        有可能.在产生hash冲突时,两个不相等的对象就会有相同的hashcode值.当hash冲突产生时,一般有以下几种方式来处理:1、拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.2、开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入.3、再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.

java - 在 Swift 3 中实现 Java String 的 hashCode() 方法

我正在创建现有Android应用的iOS版本。在Android端,将字符串(用户名)的hashCode()发送到服务器,并根据该哈希值返回一个JSON对象。在Swift上,我尝试了hash和hashValue属性,但它们都产生了不同于Android对应物的值。所以我决定根据Java的实现自己写一个实现:inth=hash;if(h==0&&value.length>0){charval[]=value;for(inti=0;i但是当我用Swift编写上面的实现时,我遇到了溢出崩溃。有人可以帮我吗?提前致谢。这是Swift的实现:我首先必须编写一个字符扩展来返回字符的Ascii值:ext

java - 为什么默认的 Object.toString() 返回 hashCode 的十六进制表示?

我很好奇为什么Object.toString()返回这个:returngetClass().getName()+"@"+Integer.toHexString(hashCode());与此相反:returngetClass().getName()+"@"+hashCode();将哈希码显示为十六进制而不是十进制对您有什么好处? 最佳答案 简短的回答:哈希码通常以十六进制显示,因为这样我们更容易将它们保留在我们的短期内存中,因为十六进制数字比十进制表示的相同数字更短且字符种类更多。此外,(正如supercat在评论中所说的那样)十六进

java - hashcode() 和 equals() 方法

这个问题在这里已经有了答案:WhatissuesshouldbeconsideredwhenoverridingequalsandhashCodeinJava?(11个答案)关闭9年前。所以我有一个关于hashcode()和equals()方法的问题假设我只是写了一个非常基本的程序来覆盖这两个方法importjava.util.*;classEmployee{privateStringname;privateintempid;publicEmployee(Stringname,intempid){this.name=name;this.empid=empid;}publicintget

java - 我应该如何为 Java 中的循环链表定义一个好的 hashCode?

我建立了一个循环链表数据结构,代表一个单词,列表中的每个元素都是这个单词的一个字母。在我的问题的底部是列表的类定义和列表的元素。列表数据结构的目的是能够比较循环词。所以..."picture"和"turepic"是同一个循环词,所以这两个列表是相等的。所以我覆盖了equals()比较两个列表时,我已经读过,每当您必须覆盖equals()时,您还必须覆盖hashCode().但是,我真的不知道如何做到这一点。我应该如何为我设置的内容定义一个好的hashCode?我应该考虑哪些事情?在“picture”和“turepic”的例子中,这两个列表是相等的,所以它们的hashCode需要相同。有

java - equals() 和 hashCode() 的区别

我想要一个关于equals()、“==”和hashCode()的简要定义。如果我运行以下代码意味着输出将是“truefalse24203952420395”。但我知道equals()方法比较字符串,而“==”比较引用。但在输出中,hashCcode()方法将两个字符串的引用编号打印为相同,这就是“==”返回“false”的原因。Stringstr="Name";Stringstr1=newString("Name");if(str.equals(str1))System.out.println("true");elseSystem.out.println("false");if(str

java - Google App Engine、JDO 和 equals/hashCode

我在GoogleAppEngine中有一个运行良好的应用程序。我意识到我忘记实现equals和hashCode的一个JDO增强对象(我需要在一个集合中使用该对象)。所以我做了。在这些实现中我并没有做任何特别的事情,事实上我只是使用Eclipse来生成它们。像这样:@PrimaryKey@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)privateLongid;@PersistentprivateStringappleId;@OverridepublicinthashCode(){finalintprime=31;intres