彻底搞懂HashMap(上)( 二 )
如果做到了以上两步 , 那么我就保证两件事情
第一点 32位的变化值 他尽可能的参与到运算
第二点 得到的结果是一个0,1 平均最高的数字
接下来我们来看式子二
式子2 很简单 , 就是n-1, 为啥要使用&和式子一计算, 那又是为啥 , 接下来我们就来解答这些问题
为什么要用&
问题一为啥要用&、
你有没有想过 , 万一我通过 一个所谓的哈希算法算出来的index它的值并不在数组索引里 , 比如 , 我有10个抽屉的位置 , 我通过哈希算法算出来的index 是101,那这个元素都跑到天边去了 , 还怎么放 , 没法放 , 所以我们在选用计算符号时 , 一定要确保 最终计算出来的结果一定 小于索引的 , 通过计算的式子1 , 有16 位之多 , 可以不用考虑 , 那么也就是说 , 最终得到的结果一定得小于或者等于 n-1, 而数组索引从0 开始计算 , 如果小于或者等于n-1 不就正好满足吗?那&的特性 同1 得1, 就完全能够解决这个问题
看一下的这个式子
1010 1010 0100 0101 式子1 0111 1111 式子2
0100 0101
如果式子2 固定 , 那么如果按照同一得1 来计算 , 最大的值算出来就是0111 1111, 而式子2是数组长度-1, 那么得到的结果不就正好是 数组对应的索引最大值吗?
问题二之:数组长度必须是2的n次幂
偶数必然是二进制末尾位是0 , 而奇数的末尾必然是1, 我们还是借助于之前的二进制
1010 1010 0100 010X 式子1 0111 1111 式子2
0100 0101
注意:我在的式子一最后一位写的是x
式子2 是(n-1) , n是一个偶数 , 那么(n-1)一定是一个奇数 , 那么由于&的存在 , 最终的index 值 , 就有可能最后的结果 就是有可能是个偶数页有可能是个奇数 , 至于算出来到底是个偶数还是个奇数 , 那么就由你的式子一决定啦~~
四、总结 好了 , 哥们门 , 如果以后面试官问你 , map的哈希冲突是怎么一回事 , 怎么答 , 你应该知道了吧 , 希望大家通过学习能有所收获
- 荣耀V30|麒麟990+40W快充,昔日猛将彻底沦为清仓价?网友:太遗憾
- 美国|印度宣布彻底突破5G难关,美英加澳一片欢呼,一周后白宫怒斥被骗
- 大战|一亿像素平民化,Redmi掀起千元机大战,卢伟冰彻底让友商绝望!
- 小米10纪念至尊版|小米彻底疯狂!米10至尊只卖4690!米粉不约吗?
- 流畅|手机里垃圾太多,关闭这个开关,彻底清除垃圾,手机立刻流畅
- 海淘|收到海淘包裹如何降低病毒感染风险?专家回应:手要彻底清洗
- 快充|从小米10 Ultra换成iPhone 12 Pro一周后,我彻底后悔了
- 现在入手苹果11值吗,它跟12相比到底好在哪?看完算搞懂了
- 并发容器ConcurrentHashMap
- 只需2步,彻底关闭电脑里的弹窗广告,建议收藏