更新時(shí)間:2022-01-05 10:58:44 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1452次
HashMap是java集合框架中高性能的數(shù)據(jù)結(jié)構(gòu)之一。無(wú)論數(shù)據(jù)有多大,HashMap幾乎都能為最頻繁的操作——插入和檢索——提供恒定的時(shí)間性能。這就是為什么HashMap是需要更快檢索和更快插入操作的大數(shù)據(jù)的首選。有兩個(gè)因素會(huì)影響HashMap的性能。一個(gè)是負(fù)載系數(shù),另一個(gè)是初始容量。在構(gòu)建HashMap時(shí),您必須非常謹(jǐn)慎地選擇這兩個(gè)因素 目的。在這篇文章中,我們將看看 HashMap 中的初始容量和負(fù)載因子,看看它們?nèi)绾斡绊慔ashMap的性能。
HashMap的容量 是哈希表中的桶數(shù)。初始容量是HashMap創(chuàng)建時(shí)的容量 。所述的默認(rèn)初始容量HashMap中為2 4,即16.的容量HashMap中每次它達(dá)到閾值的時(shí)間加倍。即容量增加到 2 5 =32, 2 6 =64, 2 7 =128..... 當(dāng)達(dá)到閾值時(shí)。
負(fù)載因子是決定何時(shí)增加HashMap容量的度量。默認(rèn)負(fù)載系數(shù)為 0.75f。
HashMap的閾值是當(dāng)前容量和負(fù)載因子的乘積。
閾值 =(電流容量)*(負(fù)載系數(shù))
例如,如果創(chuàng)建的HashMap初始容量為 16,負(fù)載因子為 0.75f,則閾值將為,
閾值 = 16 * 0.75 = 12
也就是說,將第 12 個(gè)元素(鍵值對(duì))添加到HashMap后,HashMap的容量從 16 增加到 32 。
每當(dāng)HashMap達(dá)到其閾值時(shí),就會(huì)發(fā)生重新散列。重新散列是創(chuàng)建具有新容量的新HashMap對(duì)象并將所有舊元素(鍵值對(duì))重新計(jì)算其散列碼后放入新對(duì)象的過程。這個(gè)重新散列的過程既耗費(fèi)空間又耗費(fèi)時(shí)間。因此,您必須通過記住預(yù)期元素(鍵值對(duì))的數(shù)量來選擇初始容量,以便重新散列過程不會(huì)過于頻繁地發(fā)生。
在選擇負(fù)載因子時(shí),您還必須非常小心。根據(jù)HashMap文檔,0.75f 的默認(rèn)負(fù)載因子總是在空間和時(shí)間方面提供最佳性能。例如,
如果您選擇負(fù)載因子為 1.0f,則在填充 100% 的當(dāng)前容量后進(jìn)行重新散列。這可能會(huì)節(jié)省空間,但會(huì)增加現(xiàn)有元素的檢索時(shí)間。假設(shè)如果您選擇負(fù)載因子為 0.5f,則在填充 50% 的當(dāng)前容量后進(jìn)行重新散列。這將增加重新散列操作的數(shù)量。這將在空間和時(shí)間方面進(jìn)一步降低 HashMap。
因此,在選擇HashMap對(duì)象的初始容量和負(fù)載因子時(shí)必須非常小心。選擇初始容量和負(fù)載因子,以便最大限度地減少重新散列操作的數(shù)量。
通過上述介紹,相信大家對(duì)HashMap初始容量計(jì)算方法已經(jīng)有所了解,大家如果想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java基礎(chǔ)教程,里面有更豐富的知識(shí)在等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)