关于Hashtable的一个问题

hunauwuke 2009-08-12 08:37:29
index = (hash & 0x7FFFFFFF) % tab.length;

请问上面的语句为何原理,hash为关键字的hash值,index为关键字在数组中的入口地址,即下标
...全文
109 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dz007 2009-08-12
  • 打赏
  • 举报
回复
可能是要取正吧,首位是符号位,0就是正啦……
lh_fengyuzhe 2009-08-12
  • 打赏
  • 举报
回复
index = (hash & 0x7FFFFFFF) % tab.length
是具体映射算法,关键一步是% tab.length这是把hashCode具体映射到tab数组的位置,其实就是简单的除tab的长度取余
而hash & 0x7FFFFFFF就是把一个hashCode与
01111111111111111111111111111111
按位与,相当于取绝对值,取绝对值的目的是怕出负数

index = (hash & 0x7FFFFFFF) % tab.length

等于,相当于
| hash | % tab.length
hunauwuke 2009-08-12
  • 打赏
  • 举报
回复
还想问一下,为什么要保证首位为0,那个hash&0x7FFFFFFF是怎么算的
hunauwuke 2009-08-12
  • 打赏
  • 举报
回复
哦,明白了,谢谢楼2楼三的
lovecj6185 2009-08-12
  • 打赏
  • 举报
回复
那就是算法的需要的阿
就像说为何
x = (y+1)*z
gesanri 2009-08-12
  • 打赏
  • 举报
回复
hash&0x7FFFFFFF就是保证首位为0而其它位不变,取模tab.length是因为hash&0x7FFFFFFF的值可能超过tab.length,取模后保证比tab.length小,因为你入口地址不可能比tab.length还大
hunauwuke 2009-08-12
  • 打赏
  • 举报
回复
我的意思是为什么要用0x7FFFFFFF与hash位运算,然后再与tab.length取余
lovecj6185 2009-08-12
  • 打赏
  • 举报
回复
java 中 & 是位运算符
运算方法是,只有当两个变量相同位置上的位都是1是,&运算符才将结果位设置为1
比如说
byte b = 4 & 12;
那末打印b的结果就是4
因为
4的二进制是0100
12的二进制是1100
按位做&运算,结果就是0100,所以就是4


%,是用来取余数
比如 5%3 结果就是2

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧