第1部分 HashMap介紹
HashMap簡(jiǎn)介
HashMap 是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。
HashMap 繼承于AbstractMap,實(shí)現(xiàn)了Map、Cloneable、java.io.Serializable接口。
HashMap 的實(shí)現(xiàn)不是同步的,這意味著它不是線程安全的。它的key、value都可以為null。此外,HashMap中的映射不是有序的。
HashMap 的實(shí)例有兩個(gè)參數(shù)影響其性能:“初始容量” 和 “加載因子”。容量 是哈希表中桶的數(shù)量,初始容量 只是哈希表在創(chuàng)建時(shí)的容量。加載因子 是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對(duì)該哈希表進(jìn)行 rehash 操作(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍的桶數(shù)。通常,默認(rèn)加載因子是 0.75, 這是在時(shí)間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時(shí)也增加了查詢成本(在大多數(shù) HashMap 類的操作中,包括 get 和 put 操作,都反映了這一點(diǎn))。在設(shè)置初始容量時(shí)應(yīng)該考慮到映射中所需的條目數(shù)及其加載因子,以便大限度地減少 rehash 操作次數(shù)。如果初始容量大于大條目數(shù)除以加載因子,則不會(huì)發(fā)生 rehash 操作。
HashMap的構(gòu)造函數(shù)
HashMap共有4個(gè)構(gòu)造函數(shù),如下:
// 默認(rèn)構(gòu)造函數(shù)。 HashMap() // 指定“容量大小”的構(gòu)造函數(shù) HashMap(int capacity) // 指定“容量大小”和“加載因子”的構(gòu)造函數(shù) HashMap(int capacity, float loadFactor) // 包含“子Map”的構(gòu)造函數(shù) HashMap(Map<? extends K, ? extends V> map)