2013-06-11 44 views
-2

我很确定这不是重复的,虽然标题可能似乎used.Please看看java中的哈希码

在JAVA计算哈希码是什么?

在当前状态的基础上?我不这么认为。

下面是代码:

initTest inttt2 = new initTest();// this initTest has params: int x and String str 
    inttt2.str = "i am object1"; 
    inttt2.x = 374892762; 
    System.out.println(inttt2.hashCode()); // print say 12345 
    inttt2.x = 938745; 
    inttt2.str = "i am object22222222"; 
    System.out.println(inttt2.hashCode()); // still print 12345 

因此,这里的问题: 做哈希码取决于内存的位置,如果它不依赖于当前的状态???

无论你改变对象多少,哈希码是否保持不变?

我不是数据结构方面的专家,但有一个问题非常困扰我。

这个哈希码(尤其是Object的本地)函数必须返回一个整数范围内的哈希值,所以除了根据其属性进行计算以外,还有哪些选项。

+3

'我确定这不是重复的'呃,_why?_ – SLaks

+0

请首先阅读Java文档或者在网上提高您的搜索技能。 –

+0

嘿在这个对象被改变,而不是在任何其他问题。 如果我再次问复制问题,我很抱歉。 uhhhhhhhhhhhhhh ........到底什么是我的错? –

回答

3

这是文档对Object#hashCode()的说明。

尽管合理实际,类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (这一般是通过将该对象的内部地址转换成一个整数来实现的,但不是由的JavaTM编程语言不需要这种实现技巧。

String#hashCode()更确定性的。

返回此字符串的哈希码。为一个字符串对象中的散列码为

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 

使用INT算术,其中s [i]是字符串的第i个字符,n是串的长度来计算,并表示^求幂。 (空字符串的散列值为零)

+0

嘿告诉我一件事?可能有两个对象具有相同的哈希码。但如果对象的位置在32位以内,具有不同内存位置的两个不同对象如何具有相同的散列码(我猜对象#散列码将地址作为32位地址并返回一个32位散列码,那么为什么还要使用散列) –