jjzjj

hashcode

全部标签

具有覆盖的 hashCode() 和 equals() 的 Java HashMap 不返回任何数据

我最近一直在使用Java的HashMap,并且遇到了一些有趣的行为。我目前正在使用它来存储具有多个字段的键/值对象。为此,我重写了hashCode()和equals(),如下所示:publicfinalclassTransitionState{privateStringmStackSymbol;privateStringmTransitionSymbol;privateintmState;privatestaticfinalintHASH_SEED=7;//ShouldbeprimeprivatestaticfinalintHASH_OFFSET=31;//Constructorand

java - 为什么 ByteBuffers 的 hashCodes 是一样的?

我有一个这样的类构造器:publicJavoImageCorrectedDataHeader(){ByteBufferbuffer=ByteBuffer.allocate(this.size());buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);setByteBuffer(buffer,0);System.out.println("buffer.hasCode="+buffer.hashCode());}在我的其他类(class)中,我使用在不同的位置和时间创建了上述类(class)的许多实例newJavoImageCorrectedDat

java - 如何从三个 long 生成哈希码

我有一个以坐标作为键的HashMap。Coordinates有3个长整型,分别代表x、y和z坐标。(坐标是并且需要是自定义类,坐标需要是longs)。现在我希望能够访问例如字段[5,10,4]通过做:hashMap.get(newCoordinate(5,10,4)).我已经实现了equals方法,但这还不够,因为显然我还需要为hashCode提供一个实现。所以我的问题是如何从三个long生成唯一的hashCode?。附加:使用来自外部库的哈希生成器不是选项。 最佳答案 JoshuaBloch在chapter3中告诉您如何为Coor

java - hashCode()在Java中是如何实现的

如何hashCode()实现了吗?我的假设是它使用对象内存位置作为运行哈希函数的初始数字(种子)。然而,事实并非如此。我也看过Hash:Howdoesitworkinternally?但它没有回答我的问题。是的,我可以下载SDK,但在我这样做并查看代码之前,也许其他人已经了解它。谢谢:)编辑:我知道它应该被覆盖等等,所以请尽量留在主题上:) 最佳答案 不,不,不。此线程中的所有答案都是错误的,或者至少只是部分正确。首先:Object.hashCode()是一种本地方法,因此其实现完全依赖于JVM。它可能在HotSpot之间变化和其他

java - 在Java中,为什么equals()和hashCode()必须保持一致?

如果我重写类中的任何一个方法,它必须确保如果A.equals(B)==truethenA.hashCode()==B.hashCode也必须为真。谁能告诉我一个简单的例子,如果违反了这一点,它会导致问题吗?我觉得跟你用那个class作为Hashmap的key类型有关系吗? 最佳答案 当然:publicclassTest{privatefinalintm,n;publicTest(intm,intn){this.m=m;this.n=n;}publicinthashCode(){returnn*m;}publicbooleanequa

java - 为什么在这个例子中调用hashcode?

有人可以解释为什么吗hashCode在下面的示例中被调用?importjava.util.List;publicclassJSSTestextendsObject{publicstaticvoidmain(Stringargs[]){JSSTesta=newJSSTest();JSSTestb=newJSSTest();Listlist=newjava.util.ArrayList();list.add(a);list.add(b);System.out.println(list.get(0));System.out.println(list.get(1));}@Overridepub

java - Java String 中的 hashCode 实现

这个问题在这里已经有了答案:Avoidinggetfieldopcode(2个答案)关闭7年前。只是好奇,在String的hashCode实现中,在hashCode实现(v1.8.0_65)中创建额外引用背后的原因是什么:publicinthashCode(){inth=hash;if(h==0&&value.length>0){charval[]=value;for(inti=0;i考虑到value是最终的并且仅在构造函数中创建(即线程安全),为什么我们在这里需要变量val[]引用?即这行得通吗:publicinthashCode(){if(hash==0&&value.length

java - 使用 UUID 实现便宜的 equals() 和 hashCode()

我有一个不可变类TokenList,它由Token对象列表组成,这些对象也是不可变的:@ImmutablepublicfinalclassTokenList{privatefinalListtokens;publicTokenList(Listtokens){this.tokens=Collections.unmodifiableList(newArrayList(tokens));}publicListgetTokens(){returntokens;}}我对这些TokenList执行了多项操作,这些操作将多个TokenList作为输入并返回单个TokenList作为输出。可以有任意

java - 这是天真的等于,哈希码好吗?

我有一个代表具有唯一Id属性的DB条目的类。是否可以仅基于此属性实现equals()和hashcode()方法@OverridepublicinthashCode(){returnid;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getClass())returnfalse;Taskother=(Task)obj;if(id!=other.id)returnfalse;returntrue;}

java - 直接使用 HashCode 访问 HashSet? ( java )

您好,我想知道如果您拥有要查找的对象的Hashcode,是否可以直接访问HashSet的内容,有点像将HashCode用作HashMap中的键。我想它可能会像这样工作:MyObjectobject1=newMyObject(1);SetMyHashSet=newHashSet();MyHashSet.add(object1)inthash=object1.getHashCodeMyObjectobject2=MyHashSet[hash]???谢谢!编辑:感谢您的回答。好吧,我知道我可能会稍微插入HashSet的契约,但是对于这个特定的项目,相等性完全由哈希码决定,而且我确信每个哈希码