关于Hashtable的一个问题
index = (hash & 0x7FFFFFFF) % tab.length;
请问上面的语句为何原理,hash为关键字的hash值,index为关键字在数组中的入口地址,即下标
------解决方案--------------------java 中 & 是位运算符
运算方法是,只有当两个变量相同位置上的位都是1是,&运算符才将结果位设置为1
比如说
byte b = 4 & 12;
那末打印b的结果就是4
因为
4的二进制是0100
12的二进制是1100
按位做&运算,结果就是0100,所以就是4
%,是用来取余数
比如 5%3 结果就是2
------解决方案--------------------hash&0x7FFFFFFF就是保证首位为0而其它位不变,取模tab.length是因为hash&0x7FFFFFFF的值可能超过tab.length,取模后保证比tab.length小,因为你入口地址不可能比tab.length还大
------解决方案--------------------那就是算法的需要的阿
就像说为何
x = (y+1)*z