一、hashmap的簡介概況
1.hash簡介
hashmap 是乙個雜湊表,它儲存的內容是鍵值對(key-value)對映。hashmap 的實現不是同步的,這意味著它不是執行緒安全的。它的key、value都可以為null。此外,hashmap中的對映不是有序的。
hashmap 的例項有兩個引數影響其效能:「初始容量」 和 「載入因子」,容量 是雜湊表中桶的數量,初始容量 只是雜湊表在建立時的容量。載入因子 是雜湊表在其容量自動增加之前可以達到多滿的一種尺度,通常,預設載入因子是 0.75。
2.hashmap的建構函式
一共有四個建構函式
// 預設建構函式。
hashmap()
// 指定「容量大小」的建構函式
hashmap(int capacity)
// 指定「容量大小」和「載入因子」的建構函式
hashmap(int capacity, float loadfactor)
// 包含「子map」的建構函式
hashmap(map extends k, ? extends v> map)
3.hashmap的api
void clear() //清空hashmapobject clone() //轉殖乙個hashmap物件並返回二、hashmap的資料結構boolean containskey(object key) //判斷hashmap是否包含key。
boolean containsvalue(object value) //判斷hashmap是否包含「值為value」的元素。
set> entryset() //返回「hashmap中所有entry的集合」,它是乙個集合v get(object key) //獲取key對應的valueboolean isempty()
setkeyset()
v put(k key, v value) //對外提供介面,讓hashmap物件可以通過put()將「key-value」新增到hashmap中void putall(map extends k, ? extends v> map) //將"m"的全部元素都新增到hashmap中v remove(object key) //刪除「鍵為key」元素int size()
collectionvalues()
hashmap與map關係如下圖:
從圖中可以看出:
(01) hashmap繼承於abstractmap類,實現了map介面。map是"key-value鍵值對"介面,abstractmap實現了"鍵值對"的通用函式介面。
(02) hashmap是通過"拉鍊法"實現的雜湊表。它包括幾個重要的成員變數:table, size, threshold, loadfactor, modcount。
table是乙個entry陣列型別,而entry實際上就是乙個單向鍊錶。雜湊表的"key-value鍵值對"都是儲存在entry陣列中的。
size是hashmap的大小,它是hashmap儲存的鍵值對的數量。
threshold是hashmap的閾值,用於判斷是否需要調整hashmap的容量。threshold的值="容量*載入因子",當hashmap中儲存資料的數量達到threshold時,就需要將hashmap的容量加倍。
loadfactor就是載入因子。
modcount是用來實現fail-fast機制的。
HashMap類的理解
hashmap是乙個雜湊表,它的儲存內容是鍵值對。紫色部分代表雜湊表,每個元素後面都是乙個單鏈表的頭結點。原始碼分析 上面原始碼,hashmap初始容量為 4個,最大容量為2的 30次冪,增長因子為 0.75 在進行擴容時,擴容數量 增長因子 當前容量。第 90行,為對應的 hash 表 hashm...
對於hashmap的理解
對key求hashcode得到的值來選桶 對key求equals,如果相同則覆蓋,不相同則尾插成鍊錶 太長變成紅黑樹 取值的時候是插入的逆過程,通過求傳入的key的hashcode來選桶,桶裡的鍊錶挨個和傳入的key求equals,true則取value,false則繼續找下乙個。之前一直都是這麼理...
HashMap原理的理解
hashmap 首先根據key計算hash值,hashcode右移16位與hashcode異或計算 用hash值不用hashcode值是因為hashcode 32位 太大不方便計算,並且得到答案的概率不均衡。第二步 是根據hash值去計算陣列下標 n 1 hash 用這個不用hash值取餘計算因為二...