使用HashMap時為什麼需要設定初始化大小

2021-10-13 21:33:09 字數 968 閱讀 1129

hashmap有擴容機制,就是當達到擴容條件時會進行擴容。hashmap的擴容條件就是當hashmap中的元素個數(size)超過臨界值(threshold)時就會自動擴容。在hashmap中,threshold = loadfactor * capacity。

所以,如果我們沒有設定初始容量大小,隨著元素的不斷增加,hashmap會發生多次擴容,而hashmap中的擴容機制決定了每次擴容都需要重建hash表,是非常影響效能的。

話不多說上**:

需要迴圈10000次,同時往map中插入一萬條鍵和值。如果初始化大小為16的話,那麼需要擴容6250次,耗時為12毫秒。

相對應的如果一開始就就初始化大小為100000的話,就不需要擴容了,耗時為5毫秒。

public

static

void

main

(string[

] args)

system.out.

println

("指定大小16耗時為:"

+(system.

currenttimemillis()

- start));

mapmap02 =

newhashmap

<

>

(100000);

start = system.

currenttimemillis()

;for

(int i =

0; i <

100000

; i++

) system.out.

println

("指定大小200耗時為:"

+(system.

currenttimemillis()

- start));

}

**執行結果為:

結論:在編寫**時還是盡量給出初始化值,當然如果不給出初始化值的話,預設的大小為16.

HashMap為什麼樹化

在jdk1.8中,hashmap做了一些改變 jdk1.7中,發生雜湊碰撞時,將鍵值對新增到鍊錶頭部,jdk1.8是將鍵值對新增到鍊錶尾部。jdk1.8中,如果鍊錶的長度超過8,將會將鍊錶轉化為紅黑樹。容量的初始化 jdk1.7的hashmap在構造時會對容量進行初始化,而jdk1.8是在首次向ha...

使用SqlParameter時引數為什麼要設定長度

sqlparameter的作用是用來傳參,以及防止sql語句注入的。以前在連線資料庫時,我都是像這樣做的。new sqlparameter name name d層 public class dao public datatable selectbyname string name dt sqlhe...

為什麼需要PKI

為什麼需要pki 隨著電子商務的迅速發展,資訊保安已成為焦點問題之一,尤其是網上支付和網路銀行對資訊保安的要求顯得更為突出。為了能在網際網路上開展安全的電子商務活動,公開金鑰基礎設施 pki,public key infrastructure 逐步在國內外得到廣泛應用。我們是否真的需要pki,pki...