雜湊表到底是個啥?

2021-10-03 22:27:34 字數 1000 閱讀 8474

雜湊表的本質其實是個陣列:

那就是雜湊表就是通過將關鍵值也就是key通過乙個雜湊函式加工處理之後得到乙個值,這個值就是資料存放的位置,

請看這張圖來理解雜湊函式的作用:

雖然說雜湊表就是個陣列,但是他不像陣列那樣儲存乙個值,雜湊表儲存的是鍵值對,就想學號:101000,姓名:張三,簡單點說就是乙個值對應另外乙個值。比如a對應b,那a就是key,b就是value;雜湊表存放的就是這樣的鍵值對。在焊錫表中是通過雜湊函式將乙個值對映到另外乙個值的,所以在雜湊表中a對映到b,a就是鍵值,而b呢叫做a的雜湊值,也就是hash值。

雜湊表是如何存放資料:

這裡的序號是個key,我們也知道雜湊表根據key值通過雜湊函式計算得到乙個值,這個值就是用來確定這個entry要放在雜湊表中的位置的,實際上這個值就是乙個下標值,來確定放在陣列的那個位置上。

現在學號101000 經過雜湊函式算的entry應該放在雜湊表的下標為1的位置上,但是如果再來乙個學號102000,經過雜湊函式得到位置也是1怎麼辦呢?

關於雜湊衝突的解決辦法有好幾個:我們這裡介紹開放定址法和拉鍊法》;

開放定址法簡單的來說就是:既然位置被佔了,那就找另外乙個位置,怎麼找其他位置?假設當前1位置被佔了,那就看看2的位置佔了沒,,2的位置也佔了,那就看3的位置佔了沒,依次類推知道找到沒有被佔的位置.

拉鍊法:開放定址法是如果當前位置被佔了,那就找其他位置。而拉鍊法不一樣還是找當前位置,可是當前位置被佔了怎麼辦呢?所以這裡採用的是鍊錶?比如下圖中王二佔了1的位置,再來個李四也是這個位置,怎麼解決呢?通過鍊錶,所以entry中還需要額外的儲存乙個next指標,這個指標指向陣列的另外乙個位置,將李四安排在這裡,然後張三那個entry中的next指標指向的是李四的位置,也就是儲存了這個位置的記憶體位址,如果還有衝突,那就把又衝突的那個entry放在乙個新的位置上,然後李四的entry中的next指向他。這樣就形成了乙個鍊錶。

雜湊表的擴容:

Webhook到底是個啥?

伺服器 jenkins servergit serverngrokgithub webhook 在配置jenkins實現前端自動化構建的過程中,對於自動化的過程理解很模糊,只是知道jenkins伺服器,git倉庫和後端應用伺服器這三個概念。答案就是 git webhook機制發出請求,告知jenki...

elemtype到底是個啥?

以前對這個東西的一知半解,今天有時間,查了多方面的資料,總結下 elemtype簡單來說就是 用來更好的替代,他也可以叫做別的名字,比如說 define elemtype int 寫程式,就可以用elemtype來進行替代int,若以後想要改elemtype所定義的資料型別為char,直接 defi...

generator yield到底是個啥

先來乙個函式 function show let gen show gen.next 12 gen.next 5 通過函式我們可以看到,定義a接收了yield傳進來的引數,現在請大家和我玩個遊戲,猜猜看a是幾 好了,不賣關子了,咱們執一下看看 那麼現在反過來就有乙個問題了,可能有些人會說,等會,我有...