資料結構 字典hashtable

2021-10-10 16:56:27 字數 1244 閱讀 6033

redis的資料庫就是使用字典來作為底層實現的, 對資料庫的增、 刪、 查、 改操作也是構建在對字典的操作之上的。

舉個例子, 當我們執行命令:

redis> set msg 」 hello world"
在資料庫中建立乙個鍵為 」msg 」,值為 」 helloworld 的鍵值對時, 這個鍵值對就是儲存在代表資料庫的字典裡面的。

除了用來表示資料庫之外, 字典還是hash鍵的底層實現之一,當乙個雜湊鍵包含的鍵值對比較多, 又或者鍵值對中的元素都是比較長的字串時, redis就會使用字典作為雜湊鍵的底層實現。

字典實現資料庫和hash鍵,那字典由什麼實現的呢?

使用雜湊表作為底層實現, 乙個雜湊表裡面可以有多個雜湊表節點, 而每個雜湊表節點就儲存了字典中的乙個鍵值對。

接下來的三個小節將分別介紹redis的啥希表、 雜湊表節點以及字典的實現。

hash表由dictht結構定義

table屬性是乙個陣列, 陣列中的每個元素都是乙個指向dict.h/dictentry結構的指標, 每個dictentry結構儲存著乙個鍵值對。 size 屬性記錄了雜湊表的大小, 也即是table陣列的大小, 而used屬性則記錄 了雜湊表目前已有節點(鍵值對)的數量。sizemask屬性的值總是等於size-1, 這 乙個屬性和雜湊值 一起決定乙個鍵應該被放到table陣列的哪個索引上面。

dicttype結構

完整的字典結構:

資料結構 HashTable

基本介紹 雜湊表管理學生資訊概圖 示例 data public class student public student int id,string name,string string address public class studentlinkedlist 如果鍊錶為空,直接將節點新增到鍊錶...

資料結構與演算法 Hash Table

參考自 談談 hash table 雜湊表是一種資料結構,實現key value的快速訪問。之前說過陣列可以實現快速隨機訪問,所以雜湊表肯定會使用到陣列。在這裡,我們把每乙個陣列的單元叫做乙個bucket 桶 雜湊表的大小最好是素數。雜湊表是乙個在時間和空間上做出權衡的經典例子。如果沒有記憶體限制,...

資料結構 Hashtable 閉雜湊

雜湊表是常見資料結構中一種擁有高效插入,高效查詢的結構,時間複雜度為o 1 閉雜湊雜湊的不足之處就是隨著衝突的資料增多,插入的效率也會隨之變慢,為了優化閉雜湊雜湊的效率,我們可以採取以下的方式 1.當插入的資料佔總大小的一定比率的時候,也稱負載因子,我們可以對雜湊表進行擴容,重新通過雜湊函式求得位置...