JDK的经典hash算法(h ^ (h >>> 16)) & (capitity -1),简单解读

Hash函数:JDK的经典hash函数
简单解读,待扩展。。。

int hash(Object key) {
 	int h = key.hashCode();
 	return (h ^ (h >>> 16)) & (capitity -1); //capicity表示散列表的大小,最好使用2的整数倍
}

大槽位
capitity=16777216;key=11146485;hashCode[简单取余](可变)

1010 1010 0001 0100 1111 0101	h=11146485
0000 0000 0000 0000 1010 1010	>>>16
1010 1010 0001 0100 0101 1111	^	//高低位数据权重保留
1111 1111 1111 1111 1111 1111	(capitity -1)=16777215
1010 1010 0001 0100 1111 0101	&结果===11146485//高低位数据的变化影响都有保留,尽可能地离散

小槽位
capitity=32;key=21;hashCode[简单取余]

0000 0000 0001 0101	h=21
0000 0000 0000 0000	>>>16
0000 0000 0001 0101	^  21//不改变低位数据权重
0000 0000 0001 1111	(capitity -1)=31
0000 0000 0001 0101	&31结果===21

附:
进制转换 - 在线工具

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值