java中 hashmap中小数,java基础知识--HashMap中对 h(length-1)的理解
1、HashMap 數(shù)組下標(biāo)計(jì)算方式:
(h 是k的hashcode值;length是數(shù)組長(zhǎng)度,HashMap數(shù)組默認(rèn)長(zhǎng)度是16)
2、&是什么意思?
&在 java 中做與運(yùn)算,& 是所有的2進(jìn)制位數(shù)“與”出的最終結(jié)果,“與”的規(guī)則是兩者都為1時(shí)才得1,否則就得0
例如
132&15 = ?
答案:4
why?
阿拉伯?dāng)?shù)字(十進(jìn)制):132? ? ? ?二進(jìn)制:10000100
阿拉伯?dāng)?shù)字(十進(jìn)制):15????? 二進(jìn)制:0000 1111(計(jì)算器轉(zhuǎn)換應(yīng)該是1111,因?yàn)閮蓚€(gè)二進(jìn)制進(jìn)行運(yùn)算時(shí),需要在位數(shù)少的前面補(bǔ)零-補(bǔ)碼操作)
10000100 & 0000 1111 = 0100
(0100 & 1111 = 0100 )真正的運(yùn)算是這樣的,根據(jù)&的規(guī)則則取末尾是0的0100
根據(jù)上述的例子差不多能明白點(diǎn)了吧,如果還有疑惑點(diǎn)接著往下看
public class HashTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(128&129); //128:10000000 129:10000001 ##結(jié)果:128(10000000)
System.out.println(128&15); //15:0000 1111 128:10000000 ##結(jié)果:0(0000)
System.out.println(129&15); //15:0000 1111 129:10000001 ##結(jié)果:1(0001)
System.out.println(134&15); //15:0000 1111 134:10000110 ##結(jié)果:6(0110)
System.out.println(134&14); //14:0000 1110 134:10000110 ##結(jié)果:6(0110)
System.out.println(133&15); //15:0000 1111 133:10000101 ##結(jié)果:5(0101)
System.out.println(132&15); //15:0000 1111 132:10000100 ##結(jié)果:4(0110)
System.out.println(132%16); //結(jié)果:4
}
}
①、當(dāng)兩個(gè)數(shù)末尾是1和0時(shí),根據(jù)規(guī)則取0的數(shù)
②、當(dāng)兩個(gè)數(shù)末尾都是1時(shí),根據(jù)規(guī)則取數(shù)小的,例如1111和0101就是0101
③、132&15和132%16值是一樣的,其實(shí)就是兩個(gè)公式的表達(dá)h&(length-1)和 h%length,面試的時(shí)候我覺(jué)得說(shuō)哪一種都沒(méi)有什么問(wèn)題。
注意 :jdk升級(jí)到1.8之后,hashmap擴(kuò)容之后,存儲(chǔ)的數(shù)據(jù)鍵值在重新hash時(shí),它的位置要么時(shí)和原來(lái)重復(fù),要門就是原來(lái)的hash位置+擴(kuò)容的大小(例如:原來(lái)的hash桶時(shí)16,a存放的位置時(shí)2,那么在擴(kuò)容之后,hash桶變成 了32,那么a存放的位置可能時(shí)2也有可能時(shí)18)
結(jié)語(yǔ):整篇文章完全是自己幾個(gè)小時(shí)淺薄的理解記錄僅供讀者參考,作者自己也不能確定說(shuō)的就是正確的,只是自己實(shí)驗(yàn)的總結(jié),歡迎讀者評(píng)論區(qū)討論
————————————————
版權(quán)聲明:本文為CSDN博主「股狼」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq394829044/article/details/103427595
總結(jié)
以上是生活随笔為你收集整理的java中 hashmap中小数,java基础知识--HashMap中对 h(length-1)的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php丢弃,在IIS 7.5中,PHP吓
- 下一篇: oracle refresh force