"random".hashCode()
返回值-938285885。预计hashCode()
会出现负值吗?
根据以下问题,计算字符串的hashCode()
是一种方法,但是使用它,随着字符串长度的增加,值不断增加,最终大于Integer.MAX_VALUE
?
答案 0 :(得分:10)
hashCode()是否需要负值?
他们完全有效,是的。
随着字符串长度的增加,值不会继续增加,最终会大于Integer.MAX_VALUE吗?
是什么让你认为哈希码随着字符串长度的增加而增加?
基本上,您应该将哈希码视为指纹 - 位的集合而不是具有有意义的数量的数字。散列码计算经常溢出或下溢,这绝对没问题。 “更多”或“更少”是哈希码之间的无关比较 - 所有相关的都是“相等”或“不相等”,其中规则是两个相等值的哈希码必须相等,但是两个不相等的值的哈希码可能仍然相等。数值与分段相关,但这通常是使用它们的任何实现细节。
哈希码只是一种快速查找绝对不相等的值的方法。因此,考虑一种情况,我有一组带有哈希码{1,-15,20,5,100}的字符串。如果给我一个哈希码为14的字符串,我知道字符串肯定不在集合中。如果给我一个哈希码为20的字符串,我需要用equals
对我的集合中的字符串进行检查,哈希码为20,以查看候选字符串是否在集合中