hashmap原理,如何實現的?
hashmap是執行緒不安全的。也不是有序的。
hashmap 是一張雜湊表,key-value的鍵值對形式去存值的。key 可以為空,但不能重複。
檢查key是否重複主要是檢視key的hashcode是否重複,hashcode一樣的情況下,呼叫key的equals()方法,看是否一樣。
hashcode和equals都一樣的情況下才能判斷為key重複。
hashmap影響效能有兩個因子:初始容量和載入因子。預設的載入因子是0.75
容量 是雜湊表中桶的數量,初始容量 只是雜湊表在建立時的容量。載入因子 是雜湊表在其容量自動增加之前可以達到多滿的一種尺度。
當雜湊表中的條目數超出了載入因子與當前容量的乘積時,則要對該雜湊表進行 rehash 操作(即重建內部資料結構),從而雜湊表將具有大約兩倍的桶數。
在設定初始容量時應該考慮到對映中所需的條目數及其載入因子,以便最大限度地減少 rehash 操作次數。如果初始容量大於最大條目數除以載入因子,則不會發生 rehash 操作
table:是entry的陣列。hashmap是拉鍊法實現的,entry是單向鍊錶。
size:表示hashmap的大小,它是hashmap儲存鍵值對的數量.
threhold是hashmap的閥值,它=容量*載入因子。當size達到閥值時,hashmap的容量就要加倍。
loadfactor就是載入因子
get(key),先計算key的hash值,然後通過方法換算成陣列下標。
通過陣列下標取出 entry, 因為entry是個單向鍊錶,遍歷這個鍊錶,取出key==e.key或者key.equals(e.key)的e.value;
是先通過hash值在陣列中通過下標檢索,然後equals在單向鍊錶中檢索。
陣列下標檢索非常快,鍊錶就慢很多。
HashMap的實現原理
一。hashmap的資料結構 資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。陣列 陣列儲存區間是連續的,占用記憶體嚴重,故空間複雜的很大。但陣列的二分查詢時間複雜度小,為o 1 陣列的特點是 定址容易,插入和刪除困難 鍊錶 鍊錶儲存區間離散,占用記憶體比較寬鬆,故空間複雜度很小...
HashMap實現原理
hashmap 的get 方法 呼叫get方法返回entry public v get object key getentry方法 final entrygetentry object key 對key int hash key null 0 hash key for entrye table in...
HashMap實現原理
資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。陣列儲存區間是連續的,占用記憶體嚴重,故空間複雜的很大。但陣列的二分查詢時間複雜度小,為o 1 陣列的特點是 定址容易,插入和刪除困難 鍊錶儲存區間離散,占用記憶體比較寬鬆,故空間複雜度很小,但時間複雜度很大,達o n 鍊錶的特點是...