天天看點

java小實作map家族

hashtable線程安全的遺留類不允許null

非線程安全用hashmap(允許1個鍵為null)以hashcode值存儲資料讀取速度很快無序,線程安全用concurrenthashmap或collections的synchronizedmap方法讓hashmap安全

linkedhashmap是hashmap的子類,用iterator周遊先插線得

treemap實作sortmap接口按鍵升序排列,鍵必須實作comparable接口,否則抛類型異常

以上的key值要求不能變化,否則不能映射到值

存儲結構是數組+連結清單(鍊條過長降低性能,于是jdk.18連結清單大于8轉為紅黑樹)2個key定位到相同的位置發生hash碰撞

算法越分散均勻,nodehash桶數組越大越分散,碰撞率越小

桶越大空間越大,考慮空間和時間的平衡則出現好的hash算法和擴容機制

node[] table個數為length  x  factor(負載因子)    超過個數則  resize擴容

擴容後為原來的2倍 factor預設0.75  可以修改  可以>1  空間多要求時間效率則factor改小.

擴容特别耗性能,初始化給一個大緻的數字,避免頻繁擴容