方法String#hashCode()的Java doc说:
返回此字符串的哈希码。 String对象的哈希码计算为
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用int算术,其中s [i]是字符串的第i个字符,n是字符串的长度,^表示取幂。 (空字符串的哈希值为零。)
问题:
我没有在代码中的任何地方使用它。我刚刚问了这个问题,以便更多地了解Java String类。
答案 0 :(得分:4)
对于具有不同值的两个字符串对象,是否可以使用相同的哈希码?如果是,那么请分享一些例子。
以下是具有相同哈希码的randomly generated examples短字符串的小样本:
String 1 String 2 Common hash code
-------- -------- ----------------
VTBHKIGV - FLXCLLII -1242944431
FPESRBAH - GNFWMYVA 1778061647
UYDHRTXL - HGCNRCBE 1509241566
VXQMFMDE - YMYXDWKK -1553987354
VGWBSYRX - JZNQSUXK 700334696
由于多个字符串可以共享相同的哈希码,因此无法从哈希中恢复原始字符。
答案 1 :(得分:3)
是否可以为具有不同值的两个字符串对象使用相同的哈希码?
是的,如何在没有它的情况下将无限字符串可能性映射到int
是否可以从其哈希码中获取String值?
不,请阅读1
答案 2 :(得分:1)
绝对有可能有两个具有相同哈希码的不同字符串(或对象)。这就是我们进行碰撞处理的原因。因此,通常不可能从哈希码中获取字符串值。这是因为对于长度超过4个字节的字符串,哈希码值会快速溢出32位整数。
答案 3 :(得分:0)
假设您的字符串长度为2个字符
C1,C2
你的哈希是31 * c1 + c2
你能想到映射到同一个哈希的不同值吗?
在较长的字符串中更糟糕