iOS筆記-哈希表

什么是哈希表?

哈希表也叫散列表,是一個(gè)根據(jù)鍵(key)直接訪問在內(nèi)存存儲(chǔ)位置的數(shù)據(jù)結(jié)構(gòu)

通過計(jì)算一個(gè)關(guān)于鍵值的函數(shù),將所需查詢的數(shù)據(jù)映射到表中一個(gè)位置來訪問記錄,這種方式加快了查找速度。而這個(gè)映射函數(shù)稱作散列函數(shù),存放記錄的數(shù)組稱作散列表

本質(zhì)上來說是個(gè)數(shù)組,實(shí)現(xiàn)哈希表的兩種方式:
  • 數(shù)組+鏈表
  • 數(shù)組+二叉樹

一般數(shù)組里存放的是單一的數(shù)據(jù),而哈希表中存放的是鍵值對(duì)

數(shù)據(jù)經(jīng)過散列函數(shù)計(jì)算之后,放到特定的位置

entry就是鍵值對(duì),只是不同的叫法

哈希沖突

數(shù)據(jù)經(jīng)過散列函數(shù)計(jì)算之后,指定在同一個(gè)位置上,就是哈希沖突

處理哈希沖突
1.開放尋址法

當(dāng)計(jì)算出來的位置已經(jīng)有數(shù)據(jù)了,就順著位置往后找沒有數(shù)據(jù)的位置放數(shù)據(jù)

2.拉鏈法

在原來的entry中額外保存一個(gè)next指針,指向數(shù)組的另外一個(gè)位置放置新數(shù)據(jù)

哈希表的擴(kuò)容

當(dāng)哈希表被占用的位置比較多的時(shí)候,出險(xiǎn)沖突的概率也就變高了,就會(huì)進(jìn)行擴(kuò)容

\color{red}{注意:}哈希表的擴(kuò)容不是簡單的擴(kuò)大,而是新創(chuàng)建一個(gè)數(shù)組是原來的2倍,然后把原來數(shù)組的所有entry都重新經(jīng)過新的哈希函數(shù)計(jì)算一邊再存放到新的位置上

哈希表如何讀取數(shù)據(jù)
  • 通過key利用哈希函數(shù)得出位置,然后去對(duì)應(yīng)位置拿出數(shù)據(jù),比較key,如果不對(duì)則根據(jù)next對(duì)比下一個(gè)位置的key
  • 開放尋址法則是按順序去下一個(gè)位置對(duì)比

參考:一文搞定哈希表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 定義: 散列表(Hash table,也叫哈希表),是根據(jù)鍵(Key)而直接訪問在內(nèi)存存儲(chǔ)位置的數(shù)據(jù)結(jié)構(gòu)。也就是說...
    耳環(huán)與珠釵閱讀 366評(píng)論 0 1
  • 散列表(也稱哈希表, Hash Table) (在這里, 哈希和散列基本可以混用)是一種根據(jù)key:value映射...
    天際神游閱讀 1,022評(píng)論 0 0
  • 哈希表定義 散列表(Hash table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)...
    n油炸小朋友閱讀 5,035評(píng)論 0 22
  • Hash table 也叫散列表 是根據(jù)鍵(key)而直接訪問在內(nèi)存存儲(chǔ)位置的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過計(jì)算一個(gè)關(guān)...
    阿飄誒閱讀 121評(píng)論 0 0
  • 一、先談?wù)剶?shù)組與鏈表 ?經(jīng)常寫代碼的小伙伴應(yīng)該不陌生,在編程過程中常常面臨著兩個(gè)問題:存儲(chǔ)和查找,存儲(chǔ)和查找的效率...
    ITsCLG閱讀 952評(píng)論 1 3

友情鏈接更多精彩內(nèi)容