hashCode()返回负值的字符串

时间:2015-01-14 16:16:58

标签: java hashcode

"random".hashCode()返回值-938285885。预计hashCode()会出现负值吗?

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

1 个答案:

答案 0 :(得分:10)

  

hashCode()是否需要负值?

他们完全有效,是的。

  随着字符串长度的增加,

值不会继续增加,最终会大于Integer.MAX_VALUE吗?

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

基本上,您应该将哈希码视为指纹 - 位的集合而不是具有有意义的数量的数字。散列码计算经常溢出或下溢,这绝对没问题。 “更多”或“更少”是哈希码之间的无关比较 - 所有相关的都是“相等”或“不相等”,其中规则是两个相等值的哈希码必须相等,但是两个不相等的值的哈希码可能仍然相等。数值与分段相关,但这通常是使用它们的任何实现细节。

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