a) HashMap實際上是一個“鏈表散列”的資料結構, 即陣列和鏈表的結合體。 HashMap的底層結構是一個陣列, 陣列中的每一項是一條鏈表。
b) HashMap的實例有倆個參數影響其性能: “初始容量” 和 裝填因數。
c) HashMap實現不同步, 執行緒不安全。 HashTable執行緒安全
d) HashMap中的key-value都是存儲在Entry中的。
e) HashMap可以存null鍵和null值, 不保證元素的順序恒久不變, 它的底層使用的是陣列和鏈表, 通過hashCode()方法和equals方法保證鍵的唯一性
f) 解決衝突主要有三種方法:定址法, 拉鍊法, 再散列法。 HashMap是採用拉鍊法解決雜湊衝突的。
注: 鏈表法是將相同hash值的物件組成一個鏈表放在hash值對應的槽位;
用開放定址法解決衝突的做法是:當衝突發生時,
拉鍊法解決衝突的做法是: 將所有關鍵字為同義詞的結點連結在同一個單鏈表中 。 若選定的散列表長度為m, 則可將散列表定義為一個由m個頭指標組成的指標數 組T[0..m-1]。 凡是散列地址為i的結點, 均插入到以T[i]為頭指針的單鏈表中。 T中各分量的初值均應為空指針。 在拉鍊法中, 裝填因數α可以大於1, 但一般均取α≤1。 拉鍊法適合未規定元素的大小。