草庐IT

hashCodes

全部标签

java - 使用 Objects.hash() 还是自己的 hashCode() 实现?

我最近发现了Objects.hash()方法。我的第一个想法是,这会大大整理您的hashCode()实现。请参阅以下示例:@Override//traditionalpublicinthashCode(){inthash=5;hash=67*hash+(int)(this.id^(this.id>>>32));hash=67*hash+(int)(this.timestamp^(this.timestamp>>>32));hash=67*hash+Objects.hashCode(this.severity);hash=67*hash+Objects.hashCode(this.thr

java - Java中hashCode()是如何计算的

hashCode()方法在java中返回什么值?我读到它是一个对象的内存引用...newInteger(1)的哈希值为1;String("a")的哈希值为97。我很困惑:是ASCII还是什么类型的值? 最佳答案 hashCode()返回的值并不能保证是对象的内存地址。我不确定Object类中的实现,但请记住,大多数类将覆盖hashCode()使得两个实例在语义上是等效的(但不是相同的实例)将散列到相同的值。如果类可以在依赖于hashCode与equals一致的其他数据结构(例如Set)中使用,这一点尤其重要。无论如何,都没有唯一标识

java - 是否可以在 java 中制作类似 Comparator 但用于实现自定义 equals() 和 hashCode()

我有一个对象数组,我想将它与另一个对象数组连接,除了具有相同id的对象。该对象在系统中的许多地方都使用过,并且没有实现哈希码或等号。所以我不想实现hashCode()和equals(),因为我害怕在系统中使用这些对象的地方破坏某些东西,我不这样做不知道那件事。我想将所有对象放在一个集合中,但不知何故使对象使用自定义hashCode()和equals()。类似于自定义Comparator的东西,但用于equals。 最佳答案 是的,有可能做这样的事情。(而且人们已经这样做了。)但它不允许你将你的对象放入HashMap、HashSet等

java - 我应该在 JPA 实体中编写 equals() 和 hashCode() 方法吗?

我想检查实体是否在另一个实体的集合成员(@OneToMany或@ManyToMany)中:if(entity2.getEntities1().contains(entity1)){} 最佳答案 不一定。共有三个选项:不要覆盖-这样您将使用实例。当您使用仅附加到session的实体的集合(因此保证是相同的实例)时,这很好。这(对我而言)在许多情况下是首选方式,因为它在覆盖时需要更少的代码和更少的考虑用业务key覆盖hashCode()和equals()。这可能是标识实体的属性的子集。例如,对于User,一个好的业务key可能是user

java - 如果 hashCode() 没有被覆盖,对象的哈希码是什么?

如果hashCode()方法没有被覆盖,那么在Java中对任何对象调用hashCode()的结果是什么? 最佳答案 在HotSpotJVM中,默认情况下,在第一次调用非重载Object.hashCode或System.identityHashCode时会生成一个随机数并将其存储在对象头中。随后对Object.hashCode或System.identityHashCode的调用只是从header中提取此值。默认情况下,它与对象内容或对象位置没有任何共同之处,只是随机数。此行为由-XX:hashCode=nHotSpotJVM选项控制

java - 为什么是 hashCode() 和 getClass() native 方法?

我检查了Object类的源代码,发现getClass()的方法声明是publicfinalnativeClassgetClass();而hashCode()的声明是publicnativeinthashCode();为什么这两个方法是native类中的方法,如何获取这些方法的源代码? 最佳答案 您可以找到native方法的完整源代码here我希望这对你有用。这些是本地方法,因为它必须与机器交互。这里机器相关的代码是用C语言编写的,它不是源包附带的,也不是在JavaRuntimeEnvironment的lib位置的rt.jar中。(J

java - 当 toString() 和 hashCode() 被覆盖时,如何在 java 中获取对象的 "object reference"?

我想在Java中打印对象的“对象引用”以进行调试。IE。根据情况确保对象相同(或不同)。问题是有问题的类继承自另一个类,它覆盖了toString()和hashCode()这通常会给我id。示例情况:运行一个多线程应用程序,我(在开发期间)想检查所有线程是否使用资源对象的同一个实例。 最佳答案 您究竟打算用它做什么(您想要做什么与您需要调用的内容不同)。hashCode,如JavaDocs中所定义,说:Asmuchasisreasonablypractical,thehashCodemethoddefinedbyclassObject

java - 默认 .equals 和 .hashCode 将如何适用于我的类(class)?

假设我有自己的类(class)publicclassMyObj{/*...*/}它有一些属性和方法。它不实现equals,不实现hashCode。一旦我们调用equals和hashCode,默认的实现是什么?来自对象类?它们是什么?默认equals将如何工作?默认hashCode将如何工作以及返回什么?==只会检查它们是否引用同一个对象,所以很简单,但是equals()和hashCode()方法呢? 最佳答案 是的,默认实现是Object的(一般来说;如果您从重新定义equals和/或hashCode的类继承,那么您将使用该实现代替

java - Java 字符串上 hashCode() 的一致性

Java字符串的hashCode值计算为(String.hashCode()):s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]在任何情况下(例如JVM版本、供应商等),以下表达式的计算结果是否为false?booleanexpression="ThisisaJavastring".hashCode()==586653468更新#1:如果您声称答案是“是的,存在这种情况”-那么请给出一个具体示例,说明何时“这是一个Java字符串”.hashCode()!=586653468。尽量做到具体/具体。更新#2:我们都知道依赖hashCode()的实现细节通常是不好

java - 为什么在 hashCode 中使用素数?

我只是想知道为什么在类的hashCode()方法中使用素数?例如,当使用Eclipse生成我的hashCode()方法时,总是使用素数31:publicinthashCode(){finalintprime=31;//...}引用资料:这是一个很好的Hashcode入门和我发现的关于散列如何工作的文章(C#,但概念是可转移的):EricLippert'sGuidelinesandrulesforGetHashCode() 最佳答案 选择素数是为了在哈希桶之间最好地分配数据。如果输入的分布是随机且均匀分布的,则哈希码/模数的选择无关紧