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