成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

hashmap默認(rèn)長度和擴(kuò)容 hashmap在,擴(kuò)容,時為什么是乘以2?

hashmap在,擴(kuò)容,時為什么是乘以2?模運(yùn)算可通過位運(yùn)算H&(長度-1)獲得,這是計(jì)算添加元素位置時最有效的位運(yùn)算。這是一個特別有效的操作。另外,HashMap的初始容量是2的n次方,擴(kuò)展也

hashmap在,擴(kuò)容,時為什么是乘以2?

模運(yùn)算可通過位運(yùn)算H&(長度-1)獲得,這是計(jì)算添加元素位置時最有效的位運(yùn)算。這是一個特別有效的操作。另外,HashMap的初始容量是2的n次方,擴(kuò)展也是2倍。由于容量是2的n次方,因此可以將添加的元素平均分配到HashMap中的數(shù)組上,減少哈希沖突,避免鏈表結(jié)構(gòu)的形成,降低了查詢效率。

map擴(kuò)容為什么是2倍?

HashMap使用一個名為table的數(shù)組和幾個名為entry的鏈表。查看HashMap如何應(yīng)用這些數(shù)據(jù)結(jié)構(gòu)。例如,HashMap將首先通過鍵獲取其hashcode,然后更改鍵的hashcode%表.長度查找和添加元素就是使用模運(yùn)算來查找數(shù)組的下標(biāo)。如果模運(yùn)算是2的n次方,則可以用位運(yùn)算符代替,這樣效率更高。

2. 擴(kuò)容方便。

如果直接查看源代碼,可以看到擴(kuò)展的resize方法的參數(shù)是2*表.長度(圖中是JDK7的源代碼),也就是說每次擴(kuò)容都是容量的兩倍,擴(kuò)容后需要進(jìn)行數(shù)據(jù)遷移。如果初始長度為2的n次方,則擴(kuò)展將減少數(shù)據(jù)遷移的次數(shù)。

例如,初始長度為16,將擴(kuò)展到32。位置1中的節(jié)點(diǎn)僅在擴(kuò)展后遷移到位置1和17。實(shí)際上,I位置的節(jié)點(diǎn)只會遷移到I之前和I擴(kuò)展之后的數(shù)組長度。

例如,當(dāng)數(shù)組的長度為16時,它位于1的位置。當(dāng)它擴(kuò)展到32時,它會被移到17的位置

例如,當(dāng)數(shù)組的長度為16時,它就在1的位置。當(dāng)它擴(kuò)展到32時,它仍然處于1的位置。

這是主要原因。

順便說一下,在源代碼中,如果您不將其設(shè)置為2的n次方,它也將幫助您將其設(shè)置為2的n次方。例如,如果通過15,它將幫助您將其設(shè)置為16。源代碼的對應(yīng)方法是2的整數(shù)倍。

希望對您有所幫助。你可以關(guān)注我和分享一些源代碼知識的想法