HashTable底層實現

2021-10-09 00:12:50 字數 1455 閱讀 1395

hashtable是繼承與dictionary類,實現了map介面,hashtable的主體還是entry陣列

hashtable的預設容量大小為11,負載因子為0.75

hashtable的主要方法的原始碼實現邏輯,與hashmap中非常相似,有一點重大區別就是所有的操作都是通過synchronized鎖保護實現的,只有獲得了對應的鎖,才能進行後續的讀寫操作

我們可以看到,hashtable的put方法使用synchronized修飾,也就是說當使用put方法時,必須要獲取hashtable物件的鎖

而且我們需要注意的一點是:當value值為空時,hashtable直接丟擲異常,說明hashtable不允許儲存空值

接著通過key的hashcode獲取陣列的下標(在hashmap中,是通過擾動函式來先獲取乙個hash值,然後通過index=hash&(length-1)獲取下標),接著會尋找該位置是否存在該值,如果存在,則用插入的值替換,返回該值

如果要插入的值在hashtable中不存在,則進行addentry操作:

首先判斷陣列中元素個數是否已經超過了負載容量,如果等於負載容量,則進行擴容操作,然後重新計算下標,在進行插入操作

hashtable的擴容是:擴大兩倍加一,理由是:hashtable中的陣列長度盡量為素數或者奇數,同時hashtable採用取模的方式來計算陣列下標,這樣減少了hash碰撞,計算出來的陣列下標更加均勻。但是這樣效率會比hashmap利用位運算計算陣列下標低

hashtable採用頭插法的方式遷移陣列,相比較hashmap的尾插法來說效率更高

get()方法就是鍊錶的查詢問題

stl的hashtable底層實現

hashtable在c 的stl裡佔據著比較重要的一席之地。其中的hash set hash map hash multiset hash multimap四個關聯容器都是以hashtable為底層實現方法 技巧 應該說,上述的四個關聯式容器提供的api都是對hashtable原生態api的高層封裝...

簡單HashTable實現

紙上得來終覺淺,所以我還是手動敲了一遍.懂了一點.2333333333333 直接看 和注釋 store the hash data class hashnode class hashtable hash enpty function private function hashfunc key re...

深入底層 Hashtable雜湊表的初步理解

概念 雜湊表也叫雜湊表 結構 結構有多種,最流行 最容易理解的是 順序表 鍊錶 主結構 順序表,每個順序表的節點單獨引出乙個鍊錶 1.新增資料 1.計算雜湊碼,使用hashcode 方法,返回值是乙個int型別的值,整數的雜湊碼值是本身 2.計算在雜湊表中儲存的位置 y k x x 11 y 在雜湊...