日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

源码学习【HashMap第二篇】hashMap为什么size 是2的 n次方倍

發(fā)布時間:2024/9/30 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 源码学习【HashMap第二篇】hashMap为什么size 是2的 n次方倍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這里,因為hashmap求數(shù)組位置的時候都是直接hashcode&數(shù)組大小,以前我只是想到一個數(shù)&一個數(shù)肯定會小,可以使得index在size之內(nèi)取值。沒有考慮到hash碰撞的問題,后來看到一篇博客后才理解。

首先取模操作時可以保證均分的,但是取模操作性能比較差,所以hashMap使用了近乎取模的&,并且是與上一個size-1的數(shù),達成了變相取模的操作。

但是這時候,size是不是2的 n次方倍就至關(guān)重要了。

?

舉例如下,如果數(shù)組大小是15(非2次方冪)和16(2次方冪)的區(qū)別。

?

1110(15-1)&hashcode

1111(16-1)&hashcode

假設(shè)hashcode從 1 到30,我們來看看結(jié)果:

11101111
1(0001)&1110 = 0?1(0001)&1111 = 1
2(0010)%1110 = 22(0010)%1111 = 2
3(0011)%1110= 23(0011)%1111= 3
4(0100)&1110 = 44(0100)&1111 = 4
5(0101)&1110 = 45(0101)&1111 = 5

? 。。。。。。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

可以明顯的看出來,在15的時候,這種&操作代替取模操作的特點不存在,也就是說,不能保證hashcode對應(yīng)的key放到數(shù)組均分,size = 15的時候,明顯所有尾數(shù)帶1的數(shù)組位置上都不會有值。而后者 16 就可以保證均分,避免了摸操作,又均勻分配。這就是為什么hashMap的 size 一定是2的 n次方倍

?

總結(jié)

以上是生活随笔為你收集整理的源码学习【HashMap第二篇】hashMap为什么size 是2的 n次方倍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。