hashmap ==> 容器
鍵值對:
k1 -> v1
k2 -> v2
k3 -> v3
jdk1.7:陣列 + 鍊錶
jdk1.8:陣列 + 鍊錶 + 紅黑樹
初始容量:default_initial_capacity=16
負載因子:default_load_factor=0.75
臨界值:threshold=12
臨界值 = 初始容量 * 負載因子
put() 第一次呼叫時初始化table陣列
key在陣列索引位(key為null,在table[0])
索引位元素
為null
直接新增
有值key相同 替換並返回原始值
key不同 遍歷鍊錶的next節點並判斷key
1.7 擴容:2 * table.length
新增元素時判斷
size大於臨界值
當前位置
為null
直接插入
不為null
擴容1.8 擴容:2 * table.length
新增元素時判斷
當前位置
為null
直接插入
不為null且鍊錶長度等於8
陣列長度小於64 => 擴容
陣列長度大於64 => 轉紅黑樹
HashMap在1 7 1 8中的執行緒安全問題
在jdk1.7中,當併發執行擴容操作時會造成環形鏈和資料丟失的情況。資料丟失 在jdk1.8中,在併發執行put操作時會發生資料覆蓋的情況。1 執行緒安全 兩者最主要的區別在於hashtable是執行緒安全,而hashmap則非執行緒安全。hashtable的實現方法裡面都新增了synchroniz...
HashMap的學習筆記
static class entry implements map.entry public hashmap int initialcapacity,float loadfactor final entrygetentry object key 通過key的hashcode值計算hash值 int ...
學習 HashMap 原理筆記
感謝 學習了,寫寫筆記。雜湊表。雜湊表利用陣列根據下標查詢元素,一次定位就可以找到,複雜度為o 1 可以理解,雜湊表的主幹是陣列,通過某個函式把當前元素的關鍵字對映到陣列中的某個位置上,通過下標就可以完成定位。雜湊衝突 插入的時候,用雜湊函式算出來的對映下標插入元素的時候,發現該位置已經被占用。ha...