HashMap1 7 1 8學習筆記

2021-09-25 18:18:17 字數 684 閱讀 4850

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...