有没有办法可以使用Java的.hashCode()方法为一定长度的字符串计算最小/最大哈希码?
从docs开始,使用的算法是:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
...并返回int
,可能是正面的,也可能是负面的。
由于它添加了所有字符来计算哈希值,我尝试通过在由最小/最大字符值组成的相同长度的字符串上运行.hashCode()
来查找最小/最大哈希值({ {1}} = 32,space
= 126),但我得到的~
值超出了我的最小/最大哈希范围。
s
答案 0 :(得分:2)
如果字符串长度至少为6,则最小可能hashCode为Integer.MIN_VALUE
,最大hashCode为Integer.MAX_VALUE
。
也就是说,有一个长度为6的字符串,其hashCode为Integer.MIN_VALUE
,长度为6的字符串的hashCode为Integer.MAX_VALUE
。
您正在看到整数溢出,这与hashCode
的预期一致。