国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

頻繁fullgc如何處理 hashmap在,擴(kuò)容,時(shí)為什么是乘以2?

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

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

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

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

有兩個(gè)原因

1。為了查找和添加元素,模塊化操作用于查找數(shù)組下標(biāo)。如果模運(yùn)算是2的n次方,則可以用位運(yùn)算符代替,這樣效率更高。

2. 擴(kuò)容方便。

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

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

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

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

這是主要原因。

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

希望對(duì)您有所幫助。你可以跟我分享一些關(guān)于源代碼的知識(shí)

HashMap使用一個(gè)名為table的數(shù)組和幾個(gè)名為entry的鏈表。查看HashMap如何應(yīng)用這些數(shù)據(jù)結(jié)構(gòu)。例如,HashMap將首先通過(guò)鍵獲取其hashcode,然后更改鍵的hashcode%表.長(zhǎng)度,即取hashcode模塊表數(shù)組大小

1,存儲(chǔ)方法:HashMap在Java中以鍵值對(duì)的形式存儲(chǔ)元素。2、 調(diào)用原則:HashMap需要一個(gè)hash函數(shù),該函數(shù)使用hashcode()和equals()方法向集合中添加和檢索元素。調(diào)用put()方法時(shí),HashMap計(jì)算密鑰的哈希值,并將密鑰-值對(duì)存儲(chǔ)在集合中相應(yīng)的索引中。如果鍵已存在,則該值將更新為新值。3、 其他熱點(diǎn)特性:HashMap的一些重要特性是容量、負(fù)載因子和閾值調(diào)整。

HashMap實(shí)現(xiàn)了map接口,主要為客戶提供三種數(shù)據(jù)顯示方式:只查看鍵列表;只查看值列表;或者以鍵值形式成對(duì)查看數(shù)據(jù)。map接口沒有定義如何存儲(chǔ)數(shù)據(jù),也沒有指定如何確定鍵是否相同。因此,并非所有map實(shí)現(xiàn)都與hashcode方法相關(guān)。例如,treemap要求對(duì)象實(shí)現(xiàn)comparator接口,并通過(guò)其compare方法(而不是hashcode和equals)比較兩者是否一致。同樣,如果我們自己實(shí)現(xiàn)map接口,也可以直接用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù),用==來(lái)判斷鍵值是否一致,這樣仍然可以完全滿足map接口的定義。