hashMap之hash算法优化以及寻址算法的优化

1.寻址算法优化(n是hashMap的数组大小)

不优化的寻址算法:hash对n取模
优化后的算法:hash & (n - 1)

优化依据:
用与运算替代取模,提升性能,由于n都是2的m次方,如下公式(n为2的m次方时)

hash & (n - 1) = hash %n

使用位运算只能在N为 2^n时使用

2. hash算法优化

   static final int hash(Object key) {

        int h;

        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

}

 

如上,hash算法是对象key值的(hashCode)异或(hashCode右移16位),右移16位,为何要做这种优化,has算法是hash & (n - 1),由于(n-1)的二进制值的高16位大概率都是0(n是hashMap的大小,不太可能超过2的16次方),为了让hash值的高16位参与运算,所以hash算法中将hash值的高16位和低16位进行了异或运算,使得高低16位都参与了hash计算,减少hash碰撞的概率。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值