雜湊表底層實現

2021-10-03 01:42:27 字數 859 閱讀 4139

資料結構的物理儲存結構只有兩種:順序儲存結構鏈式儲存結構

雜湊表使用陣列作為主幹,實現查詢,插入,刪除元素的時間複雜度為o(1)。

雜湊表(key,value) 就是把key通過乙個固定的演算法函式既雜湊函式轉換成乙個整型數字,然後將該數字對陣列長度進行取餘,取餘結果就當作陣列的下標,將value儲存在以該數字為下標的陣列空間裡。(把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。)

使用雜湊表進行查詢的時候,再次使用雜湊函式將key轉換為對應的陣列下標,並定位到該空間獲取value,當多個鍵被雜湊到同乙個下標時,處理雜湊碰撞衝突。

雜湊衝突處理方法:

開放定址法

鏈位址法

擴容:hashmap構造方法並沒有對內部的table陣列初始化,可能是為了防止未使用的情況下浪費記憶體。當初次執行插入,如果陣列為空就會初次呼叫擴容方法resize()建立table陣列。

如果未指定hashmap的構造方法引數,陣列初始長度為default_initial_capacity(16),載入因子為default_load_factor(0.75)。開發者也可以通過hashmap的構造方法指定初始長度和載入因子。

hashmap的容量超過當前陣列長度*載入因子,就會執行resize()演算法,該演算法將建立乙個新的陣列,長度是原來的兩倍(舊的長度左移一位),並且將原來的hashmap陣列的節點轉換到新的陣列。同時threshold變數也會是原來的兩倍,該變數用來判斷hashmap在插入後是否應該擴容。

雜湊表(雜湊表)的實現

雜湊函式直接用key size的形式,size為雜湊表的大小。衝突處理採用平方探測法,為保證可以探測到整個雜湊表空間,雜湊表大小設定為4k 3形式的素數。當雜湊表中的元素過多時會造成效能下降,這時應該倍增雜湊表的大小,重新計算原來雜湊表中每個元素在新的雜湊表中的位置。雜湊表的實現 hashtable...

雜湊表(雜湊表) C 實現

雜湊函式就是 關鍵字key 到 值value 的對映 value f key value反映的是關鍵字key的儲存位址。直接定址法 f key a key b 例如存放不同出生年份的人口數量,出生年份是關鍵字,那麼可以用直接定址法。直接定址法的優點是簡單均勻,也不會產生衝突 缺點是該方法適合表比較小...

雜湊表(雜湊)HashTable實現

近期刷leetcode發現凡是找字串中反覆字元或者陣列中找反覆資料的時候就不知道從何下手了。所以決定學習一下雜湊表解題。雜湊表的原理主要是解決分類問題,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,可是資料查詢十分麻煩 二叉樹中的資料嚴格有序,可是這是以多乙個指標作為代價的結果。...