[Java] Hashmap分析

什麼是哈希表

哈希表
在哈希表中,我們可以利用哈希函數快速訪問到數組中的目標數據。如果發生哈希衝突,就使用鏈表進行存儲。這樣一來,不管數據量爲多少,我們都能夠靈活應對。如果數組的空間太小,使用哈希表的時候就容易發生衝突,線性查找的使用頻率也會更高;反過來,如果數組的空間太大,就會出現很多空箱子,造成內存的浪費。因此,給數組設定合適的空間非常重要。

哈希函數的6個特徵:

①輸出的哈希值數據長度不變
②如果輸入的數據相同,那麼輸出的哈希值也必定相同
③即使輸入的數據相似,但哪怕它們只有一比特的差別,那麼輸出的哈希值也會有很大的差異。輸入相似的數據並不會導致輸出的哈希值也相似
④即使輸入的兩個數據完全不同,輸出的哈希值也有可能是相同的,雖然出現這種情況的概率比較低。這種情況叫作“哈希衝突”
⑤不可能從哈希值反向推算出原本的數據,即輸入和輸出不可逆
⑥求哈希值的計算相對容易。哈希函數的算法中具有代表性的是MD5、SHA-12和SHA-2等。其中SHA-2是現在應用較爲廣泛的一個,而MD5和SHA-1存在安全隱患,不推薦使用

在這裏插入圖片描述
在這裏插入圖片描述
注:圖1爲哈希表存儲位置“衝突”時的情況,圖2爲“哈希衝突”,這兩個不是一回事。
在這裏插入圖片描述

參考鏈接:
Java Set 文檔
http://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Set.html
Java Map 文檔
http://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Map.html
美國舊金山大學整理製作的算法可視化動畫演示網站
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
數據結構動態可視化網站:
https://visualgo.net/zh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章