哈希表的特征和原理


哈希表也叫散列表,是一種神奇的結構,最大的特點就是快。它的結構有很多種,最流行、最容易理解的是:順序表+鏈表的結構。主結構是長度可以動態變化的順序表,每個順序表的節點可以單獨引出一個鏈表。哈希表的原理可以從以下三點闡述。

添加數據原理:

1)、計算哈希碼,調用hashCode()方法,結果是一個int值,整數的哈希碼取自身即可

2)、根據哈希碼計算存儲位置(數組的索引)【y = k(x) (除留取余法)存入哈希表】

3)、將數據存入指定位置,如果已經有元素存在,就是出現了沖突,需要沿着鏈表比較,有重復的元素,不存儲。沒有,就存儲。

結論:添加快。時間復雜度O(1);無序。

查詢數據的原理:

和添加過程一樣,還是三步搞定。結論:查詢快。

總結:哈希表的神奇之處在於按照內容查詢,理想情況下可以達到數組索引查詢的時間復雜度O(1)。核心在於其查詢不是基於比較的,而是基於計算的。當存在沖突時,會降低效率。

如何減少沖突:

1)裝填因子:哈希表的長度和表中的記錄數的比例。超過裝填因子就要擴容。不然沖突的概率會大大提高,從而影響性能。

2)哈希函數的選擇

直接定址法 平方取中發 折疊法 除留取余法等

3)處理沖突的方法

鏈地址法 開放地址法 再散列法 建立一個公共溢出區

hashCode和equals()在哈希表添加查詢中的作用:

1)hashCode():計算哈希碼,是一個整數,根據哈希碼可以計算出數據在哈希表中的存儲位置。

2)equals():添加時出現了沖突,需要通過equals進行比較,判斷是否相同,查詢時也需要使用equals進行比較,判斷是否相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM