pet*_*ter 8 java hash hashtable hashcode
我想知道为什么Hashtable避免使用负哈希码?
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
Run Code Online (Sandbox Code Playgroud)
哪里(hash & 0x7FFFFFFF)使有符号位为0为正,但为什么我们不能将带符号的32位整数视为无符号?甚至使用模块化技巧使其变得积极.例如,
public static long int_mod(int hashcode, int tab_length){
return (hashcode % tab_length + tab_length) % tab_length;
}
Run Code Online (Sandbox Code Playgroud)
ver*_*ald 10
该值必须介于0和之间,tab.length - 1因为它用作tab存储值(和溢出元素)的内部数组(在本例中)的索引.因此,它不能是消极的.
我认为(hash & 0x7FFFFFFF) % tab.length是优先使用,(hashcode % tab.length + tab.length) % tab.length因为它更快,没有过度增加碰撞的机会,但你必须找到一个设计文件或与原始开发人员交谈才能确定.