Tag: 哈希码

Java hashCode()方法是对象相等的可靠度量吗?

我目前正在比较两个相同类型的复杂对象,其中多个字段由自定义对象类型的数据结构组成。 假设没有任何自定义对象覆盖hashCode()方法,如果我比较对象中每个字段的哈希码,并且它们将变成相同,我是否对所比较的内容有100%的信心对象是一样的吗? 如果没有,假设我不能使用任何外部库,那么您建议使用哪种方法来比较两个对象。

deepHashCode与字节数组

出于某种原因, Arrays.deepHashCode()不能与byte[] 。 还有其他等价物吗?

如何实现Object类中的hashCode()方法?

可能重复: java Object中hashCode的实现是什么? 当我浏览Object类时,我发现只有hashCode()方法的声明。 实施部分在哪里? 如果没有实现,hashCode()方法如何返回结果?

当在JVM5和JVM6中运行相同的程序时,HashMap中的项目顺序会有所不同

我有一个应用程序,它显示行中的对象集合,一个对象=一行。 对象存储在HashMap中。 行的顺序不会影响应用程序的function(这就是使用HashMap而不是可排序集合的原因)。 但是我注意到,使用两个不同版本的Java虚拟机运行时,相同的应用程序运行方式不同。 该应用程序使用JDK 5编译,可以使用Java 5或Java 6运行时运行,没有任何function差异。 有问题的对象会覆盖java.lang.Object#hashCode()并且显然已经注意遵循Java API中指定的契约。 这可以通过以下事实得到certificate:它们在应用程序的每次运行中(在同一Java运行时中)始终以相同的顺序出现。 出于好奇,为什么Java运行时的选择会影响订单?

HashMap为什么以及如何拥有自己的hashCode()内部实现,称为hash()?

根据这篇博客文章 ,HashMap在已经检索到的哈希码上重新调用自己的hashCode() (称为hash() )。 如果key不为null,则会调用key对象的hashfunction,参见上面方法中的第4行,即key.hashCode(),所以在key.hashCode()返回hashValue后,第4行看起来像 int hash = hash(hashValue) 现在,它将返回的hashValue应用到它自己的散列函数中。 我们可能想知道为什么我们使用hash(hashValue)再次计算hashvalue。 答案是,它防御质量差的哈希>函数。 HashMap能否准确地重新分配哈希码? HashMap可以存储对象,但它无法访问为其分配hashCode对象的逻辑。 例如, hash()无法集成以下hashCode()实现背后的逻辑: public class Employee { protected long employeeId; protected String firstName; protected String lastName; public int hashCode(){ return (int) employeeId; } }

实现hashCode()的首选方法是什么?

有时我需要通过组合其几个实例成员的hashCodes来实现obj的hashCode()方法。 例如,如果组合obj有成员a,b和c,我经常看到ppl将其实现为 int hashCode(){ return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode(); } 这个神奇的数字31来自哪里? 它是4字节的长度还是只是素数? 有没有其他首选/标准的方法来实现hashCode()?

我是否使用Google Guava正确实现了equals和hashCode?

我正在使用hibernate并需要覆盖equals和hashCode()。 我选择使用google-guava的equals和hashCode助手。 我想知道我在这里是否遗漏了什么。 我有id / image和filePath的 get / set方法。 @Entity @Table(name = “IMAGE”) public class ImageEntity { private Integer idImage; private String filePath; @Override public int hashCode() { return Objects.hashCode(getFilePath()); } @Override public boolean equals(final Object obj) { if(obj == this) return true; if(obj == null) return false; if(obj instanceof ImageEntity){ final ImageEntity otherImage = […]

在Java中使用Hash加倍

我想知道如何在Java中散列一个double? 我已经散列了其他原始数据和对象。 我以为我可以使用哈希码方法? 从我所看到的,这看起来非常复杂。 我遇到了一些关于创造种子的事情。 我想知道如何解决这个问题。 希望将我的哈希码的其余部分用于具有double的类? 我想知道我是否有问题试图在java中散列arraylists,数组和其他对象。 我的一些课程包含了arraylists。 非常感谢

java中==,equals和hashcode的示例

鉴于这种: String s1= new String(“abc”); String s2= new String(“abc”); String s3 =”abc”; System.out.println(s1==s3); System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); System.out.println(s3.hashCode()); 输出是: false false true true 96354 96354 96354 这里==为每个对象赋予false,但每个String对象的哈希码是相同的。 为什么会这样?

当equals()基于多个独立字段时,hashCode()方法

我有一个类的相等性基于2个字段,如果任何一个相等,那么这种类型的对象被认为是相等的。 我如何为这样的equals()编写一个hashCode()函数,以便当equals返回true时hashCode的一般契约保持不变? public class MyClass { int id; String name; public boolean equals(Object o) { if (!(o instanceof MyClass)) return false; MyClass other = (MyClass) o; if (other.id == this.id || other.name == this.name) return true; return false; } } 我该如何为这个类编写hashCode()函数? 我想避免像这样返回一个常数的简单案例: public int hashCode() { return 1; }