js資料結構 雜湊表 雜湊表

2021-09-13 02:26:05 字數 1475 閱讀 4308

雜湊表(hash table,也叫雜湊表),是根據鍵(key)而直接訪問在記憶體儲存位置的資料結構。也就是說,它通過計算乙個關於鍵值的函式,將所需查詢的資料對映到表中乙個位置來訪問記錄,這加快了查詢速度。這個對映函式稱做雜湊函式,存放記錄的陣列稱做雜湊表。

我們從上圖開始分析

通過上面簡單的例子,應該會有一下幾點乙個大致的理解

那麼我們在接著看一般我們會怎麼去取值呢?

比如我們儲存乙個key為1000,value為'張三' --->

從我們上述的解釋,它是不是應該存放在1000%10的這個插槽裡。

當我們通過key想要找到value張三,是不是到key%10這個插槽裡找就可以了呢?到了這裡你可以停下來思考一下。

看到這裡不知道你是否大致理解了雜湊函式是什麼了沒。通過例子,再通過你的思考,你可以回頭在讀一遍文章頭部關於雜湊表的定義。如果你能讀懂了,那麼我估計你應該是懂了。

hash演算法不是這裡的重點,我也沒有很深入的去研究,這裡主要還是去理解雜湊表是個怎樣的資料結構,它有哪些優點,它具體做了怎樣一件事。

而hash函式它只是通過某種演算法把key對映到列表中。

通過上面的解釋,我們這裡做乙個簡單的雜湊表

雜湊表的組成

初始化

- 初始化雜湊表有多少個槽

- 用乙個陣列來建立m個槽

class hashtable 

}

雜湊函式

處理字串的雜湊函式,這裡使用字串是因為,數值也可以傳換成字串比較通用一些

h(str),0)

}

新增
add(key,value) 

// 將值新增到對應的槽中

this.slots[h].push(value);

}

刪除
delete(key)
查詢
search(key)
講到這裡,雜湊表的資料結構已經講完了,其實我們每學一種資料結構或演算法的時候,不是去照搬實現的**,我們要學到的是思想,比如說雜湊表它究竟做了什麼,它是一種儲存方式,可以快速的通過鍵去查詢到對應的值。那麼我們會思考,如果我們設計的槽少了,在同乙個槽裡存放了大量的資料,那麼這個雜湊表它的搜尋速度肯定是會大打折扣的,這種情況又應該用什麼方式去解決,又或者是否用其他的資料結構的代替它。

補充乙個小知識點

v8引擎中的陣列 arr = [1,2,3,4,5] 或 new array(100) 我們都知道它是開闢了一塊連續的空間去儲存,而arr = , arr[100000] = 10 這樣的操作它是使用的雜湊,因為這種操作如果連續開闢100萬個空間去儲存乙個值,那麼顯然是在浪費空間。

JS 資料結構,雜湊表

雜湊表結構就是陣列,但是不同的地方是,對下標值的一種變換,這種變換被稱為雜湊函式,通過雜湊函式可以獲取到 hashcode 雜湊表,通常是基於陣列進行實現的,但是相對於陣列,它又有很多優勢,可以提供非常快速的插入,刪除,查詢操作。無論多少資料,插入和刪除值需要接近常量的實現,o 1 的時間級,實際上...

資料結構 雜湊表(雜湊表)hash table

hash table 在計算機中,雜湊表 是 一種實現了關聯陣列 抽象資料型別的資料結構,這種資料結構可以對映 鍵 key 和 值 value 補充 關聯陣列 在電腦科學中,乙個關聯陣列 associative array 對映 map 符號表 symbol table 或者是字典 dictiona...

資料結構 雜湊表 雜湊表 原理

記錄的儲存位置 f 關鍵字 這裡的對應關係f稱為雜湊函式,又稱為雜湊 hash函式 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表 hash table 雜湊表hashtable key,value 就是把key通過乙個固定的演算法函式既所謂的雜湊函式轉換成乙個整型...