草庐IT

HashCode

全部标签

java - 不同的 Enum HashCode 生成?

为什么每次运行javamain时都有不同的hashCode值?请看下面的示例代码。interfacetestInt{publicintgetValue();}enumtestimplementstestInt{A(1),B(2);privateintvalue;privatetest(intvalue){this.value=value;}publicintgetValue(){returnthis.value;}}每次运行,publicstaticvoidmain(String[]args){System.out.println(test.A.hashCode());}控制台上会有不

java - 为什么HashMap的get()在Java中会同时比较hash值和key?

我在看JDK8中HashMap的实现。在get方法中,我看到下面一行用于查找与给定键匹配的节点。if(e.hash==hash&&((k=e.key)==key||(key!=null&&key.equals(k))))为什么需要将哈希值与key进行比较?为什么上面的行不写成:if(((k=e.key)==key)||(key!=null&&key.equals(k)))有没有解释为什么这样做?谢谢。 最佳答案 引起您困惑的似乎是两件事:1。比较哈希值(通常非常)比直接比较键快。2。在==运算符中,如果第一个条件为假,则不会检查第二

来自多个字段的 Java hashCode

给定一个这样的类:classMyObject{privateStringid1;privateStringid2;@Overridepublicbooleanequals(Objecto){if(o==this)returntrue;if(!(oinstanceofMyObject)){returnfalse;}MyObjectother=(MyObject)o;returnid1.equals(other.id1)||id2.equals(other.id2);}}请注意,相等性不取决于两个字段是否匹配,任何一个字段都有效。什么是适合此类的hashCode实现?

Java 从哈希码重新创建字符串

有什么方法可以在java中使用字符串的哈希码,并重新创建该字符串?例如像这样:StringmyNewstring=StringUtils.createFromHashCode("HelloWorld".hashCode());if(!myNewstring.equals("HelloWorld"))System.out.println("Hmm,somethingwentwrong:"+myNewstring);我这样说是因为我必须将一个字符串转换为一个整数值,并从该整数值重建该字符串。 最佳答案 这是不可能的。String的哈希码

java - Java 中的递归泛型定义和 Stackoverflow

我正在为某个研究项目编写确定性有限自动机的实现,并且有一些弧导致相同的状态。我为State写了这个类,但是我想知道为什么代码会产生Stackoverflow:publicclassStateextendsHashMap>{publicstaticvoidmain(String[]args){Statet=newState();t.addTransition('a',t);t.addTransition('b',t);}publicvoidaddTransition(Charactersymbol,Statet){if(!this.containsKey(symbol)){this.pu

java - 正如 Joshua Bloch 在有效 Java 中所建议的那样,缓存哈希码如何在 Java 中工作?

我有以下来自JoshuaBloch的effectivejava的代码(第9项,第3章,第49页)Ifaclassisimmutableandthecostofcomputingthehashcodeissignificant,youmightconsidercachingthehashcodeintheobjectratherthanrecalculatingiteachtimeitisrequested.Ifyoubelievethatmostobjectsofthistypewillbeusedashashkeys,thenyoushouldcalculatethehashcode

java - HashSet 如何处理 hashCode()?

我试图更深入地理解java.util.Collection和java.util.Map但我对HashSet的功能有一些疑问:在文档中,它说:这个类实现了Set接口(interface),由哈希表(实际上是一个HashMap实例)支持。好的,所以我可以看到HashSet总是有一个Hashtable工作在后台。哈希表是一种结构,每次你想向它添加一个新元素时,它都会要求一个键和一个值。然后,根据key的hashCode将value和key存入一个bucket中。如果两个键的哈希码相同,则它们使用链表将两个键值添加到同一个桶中。如果我说错了,请纠正我。所以,我的问题是:如果HashSet始终有

此用例的 Java 集合

假设我们有一堆Car对象。每辆汽车都有一些与众不同的属性,例如制造商、型号、年份等(这些可用于创建不同的哈希码)。每辆车都有一个PurchaseOffer对象列表(一个PurchaseOffer对象包含定价\零售商信息)。我们从几个不同的来源收到汽车列表,每辆汽车都有一个PurchaseOffer。问题是,这些列表可能会重叠-一辆汽车可能出现在多个列表中。我们希望将列表聚合到一个Car集合中,其中每辆Car都包含所有遇到的PurchaseOffers。我的问题是在此聚合过程中选择要收集的内容:使用java.util.HashSet来保存我们的汽车感觉很自然,这样当遍历不同的汽车列表时,

java - 当 hashcode() 实现返回常量值时,为什么哈希表会退化为链表?

//Theworstpossiblelegalhashfunction-neveruse!@OverridepublicinthashCode(){return42;}It’slegalbecauseitensuresthatequalobjectshavethesamehashcode.It’satrociousbecauseitensuresthateveryobjecthasthesamehashcode.Therefore,everyobjecthashestothesamebucket,andhashtablesdegeneratetolinkedlists.Programs

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.