hashCode() 用于返回负值的字符串

hashCode() for string returning negative value

"random".hashCode() returns 一个值 -938285885。 hashCode() 是否应为负值?

根据下面的问题,有一种计算字符串 hashCode() 的方法,但是使用它,值不会随着字符串长度的增加而不断增加并最终大于 Integer.MAX_VALUE?

Are negative values expected for hashCode()?

它们完全有效,是的。

won't the value keep increasing as the length of string increase and eventually be greater than Integer.MAX_VALUE?

是什么让您认为哈希码会随着字符串长度的增加而增加?

基本上,您应该将哈希码视为指纹 - 位的集合而不是具有有意义大小的数字。哈希码计算 经常 溢出或下溢,这绝对没问题。 "More" 或 "less" 是哈希码之间不相关的比较 - 所有相关的是 "equal" 或 "not equal",其中规则是两个相等值的哈希码 必须相等,但两个不相等值的散列码可能仍然相等。数值在分桶方面是相关的,但这通常是使用它们的任何实现细节。

哈希码只是一种快速查找绝对不值的方法。因此,请考虑我有一组哈希码为 { 1, -15, 20, 5, 100 } 的字符串的情况。如果我得到一个哈希码为 14 的字符串,我知道字符串 definitely 不在集合中。如果我得到一个哈希码为 20 的字符串,我需要用 equals 与我的集合中哈希码为 20 的字符串进行检查,以查看候选字符串是否在集合中.