草庐IT

hashCodes

全部标签

java - Lombok @Data 是否会覆盖现有的 toString 和 hashCode 方法?

最近我们开始在我们的项目中使用Lombok特性。我们为Domain对象添加了@Data注释,这是由于Lombokapi提供的hashCode()方法抛出了一些异常。后来,当我添加@Setter和@Getter而不是@Data时,我没有发现任何问题。问题1:Lombok@Data是否覆盖类中现有的方法,如hashCode()和toString()?问题2:为什么hashCode()会在这里出问题? 最佳答案 是的,@Data意味着@EqualsAndHashCode和@ToString。参见the@Datadocumentation.

Java:只检查不可变对象(immutable对象)的equals()中的hashCode

我有一个不可变对象(immutable对象),例如笛卡尔空间中的一个节点。该类是不可变的,因此我缓存了hashCode以实现非常快速的散列。privatefinalinthashCode;privatefinaldoublex,y,z;publicNode(finaldoublex,finaldoubley,finaldoublez){this.x=x;this.y=y;this.z=z;this.hashCode=Objects.hashCode(this.x,this.y,this.z);}@Overridepublicbooleanequals(finalObjectobj){i

java - 如何使用String.hashCode生成主键

我知道这似乎已经讨论过了,答案是肯定的,String.hashCode可以为不同的字符串生成相等的值,但不太可能(CanJava'shashCodeproducesamevaluefordifferentstrings?)。但是它确实发生在我的应用程序中。以下代码将产生相同的哈希码:-347019262(jave1.7.25)Stringstring1="/m/06qw_";Stringstring2="/m/0859_";System.out.println(string1+","+string1.hashCode());System.out.println(string2+","+

java - 如果我们只覆盖类中的 hashCode() 并在 Set 中使用它会发生什么?

这可能不是真实世界的场景,只是想知道会发生什么,下面是代码。我正在创建一组UsingSet类的对象。根据Java中的哈希概念,当我第一次添加包含“a”的对象时,它会创建一个哈希码为97的桶并将对象放入其中。同样,当它遇到带有“a”的对象时,它会调用类UsingSet中重写的hashcode方法,它会得到hashcode97那么下一步是什么?由于我没有覆盖equals方法,默认实现将返回false。那么,值“a”的对象将保存在与先前哈希码为97的对象所在的同一桶中?还是会创建新的存储桶?有人知道它将如何在内部存储吗?/*packagewhatever;//don'tplacepackag

Java,Object.hashCode() 结果在所有 JVM/系统中都是常量?

对于同一对象,Object.hashCode()的输出是否需要在所有JVM实现上都相同?例如,如果"test".hashCode()在1.4上返回1,它是否可能在1.6上返回2。或者如果操作系统不同,或者实例之间的处理器架构不同怎么办? 最佳答案 没有。hashCode的输出可能会在JVM实现之间发生变化,甚至在同一JVM上程序的不同执行之间。但是,在你给出的具体例子中,"test".hashCode()的值将实际上是一致的,因为hashCode的实现对于Stringobjects是String的API的一部分(参见theJavad

java - hashcode数是否代表内存地址?

这个问题在这里已经有了答案:HowishashCode()calculatedinJava(11个答案)关闭9年前。我了解到hashcode是一个UniqueIdentificationreferencenumber,是一个十六进制数。我的疑问是,引用号是否代表对象的内存地址?例如:Employeeee1=newEmployee();System.out.println(e1.hashcode());这段代码会返回对象的内存地址吗?

java - Java 中的 equals() 和 hashCode() 契约

BertBates和KathySierra的SCJP6学习指南第554页(以及其他要求)指出x.hashCode()!=y.hashCode()要求x.equals(y)==false.但是Object的Javadoc并没有明确提到这样的要求。引用:如果根据equals(Object)方法两个对象相等,则对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。我是否应该将Javadoc所说的视为实质蕴涵,例如eq->hc?那么这两个来源之间就不会有冲突。 最佳答案 这两个语句是等价的。简单地说:如果两个hashcode

java - 有hashCode()为什么Java还需要equals()?

如果两个对象返回相同的hashCode,不就说明它们相等吗?或者我们需要equals来防止碰撞?我可以通过比较hashCode来实现equals吗? 最佳答案 如果两个对象具有相同的hashCode,则它们不一定相等。否则你会发现完美的散列函数。但恰恰相反——如果对象相等,则它们必须具有相同的hashCode。 关于java-有hashCode()为什么Java还需要equals()?,我们在StackOverflow上找到一个类似的问题: https://s

java - 尽管 hashCode() 和 equals() 为真,但 HashMap containsKey() 返回假

我有一个HashMap称为vertexIndexes.如果我用这段代码遍历它:publicbooleansearch(StringvertexName){for(Vertexname:vertexIndexes.keySet()){Stringkey=name.toString();Stringvalue=vertexIndexes.get(name).toString();System.out.println(key+""+value+""+(name.hashCode()==vertexName.hashCode())+""+name.equals(vertexName));}..

java - Object 类是如何实现的(hashCode 和内部字段等方法)?

我很好奇Object类是如何实现的。例如方法hashCode()或wait()如何表示内部状态。例如,用于存储调用对象的wait()的线程的内部锁或数据结构。为了找到这些,我下载了OpenJDK的源代码并开始挖掘。首先,我遇到的是\openjdksrc\jdk\src\share\native\java\lang\Object.c文件,其中包括:staticJNINativeMethodmethods[]={{"hashCode","()I",(void*)&JVM_IHashCode},{"wait","(J)V",(void*)&JVM_MonitorWait},{"notify"