use*_*ser 3 java arrays hash class
int value = 5381;
for (int i = 0; i < item.length(); i++) {
value = value * 33 + item.charAt(i);
}
value &= 0x7fffffff;
value %= size;
Run Code Online (Sandbox Code Playgroud)
这是伯恩斯坦的哈希码.除了最后两行,我得到了所有东西.他们在做什么?它们也会在Java编译器中产生错误,因此它们显然不是有效的代码.他们怎么能代表他们?
我几乎不在乎他们做什么,只要他们工作lol:P
按位的目的&是将所有值转换为正整数范围.这可能比简单的绝对值操作更好地保留了前一操作创建的均匀分布.此外,正如@yshavit在评论中指出的那样,消除负号的一般原因是,value最终可能会将其用作某种索引.
模数的目的%是使哈希码适合有限大小的空间.