为什么hashMap 需要对hashcode调用hash()方法进行扰动

参考了https://blog.csdn.net/wangin1013/article/details/84857417

 for (int i = 1179395; i <= 1179395; i++) {
            for (int j = 19968; j <= 40869; j++) {
                for (int m = 19968; m <= 40869; m++) {
                    if (i == 31 * j + m) {
                        System.out.println((char) j + "" + (char) m);
                    }
                }
            }
        }

一段很扯的代码,生成了一堆hashcode为1179395,长度为2的字符串。

本来以为冲突的机会不大,这一折腾,冲突的就跟北京的地铁一样,都挤着来。

所以对hashcode

static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

按照规则逆推的:s[0]*31(n-1)+s[1]*31(n-2)+…+s[n-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值