因為在開發中經常用到hashmap,hashset等集合結構,但是一直對其中的hash的意思不太理解。今天抽空查了一下資料,順便記錄一下現在的理解。
事先宣告一下, 此文只介紹雜湊表的資料結構,不介紹具體的hash演算法首先我們不要去想hash表是用來幹嘛的,先以實際問題著手。就是現在需要乙個能夠儲存key-value的資料結構。再不用hash表的話,我想到的方法是定義乙個有兩個屬性key-value的類,然後用乙個陣列來存。如下所示,
採取這種方法的話,如果要查詢某個特定的元素,就需要遍歷整個陣列,直到找到為止。
有沒有什麼辦法可以提高查詢的速率呢?這就輪到hash表出場的時候了。hash表在我的理解中就是使用了hash對映的乙個陣列。一般我們使用陣列的時候,是從索引為1開始,乙個乙個存資料,但是hash表的話,不是這樣的。
hash表存資料是這樣的乙個步驟:
那為什麼使用hash表可以提高查詢的效率呢?因為把key變成了hash值之後,直接可以利用陣列的隨機訪問得到value值,而不用去遍歷了,這樣就提高了查詢效率。如下所示,
如果不同的key計算出了相同的hash值,那麼只需要把此陣列儲存的value變成乙個鍊錶就可以了,這就是hashmap的底層結構了。
理解雜湊表
雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程式中,...
雜湊表的簡單理解
雜湊表具有查詢速度快,效率高的優點,是基於陣列,特定情況下結合鍊錶 紅黑樹 的資料結構。設計思路 設想用陣列儲存英文本母a zzzzzzzz的字串,這樣的話總共有26 8種結果,而如果想要查詢字母absdaw就只能通過遍歷陣列,非常影響速度。靈感一閃而過,如果能把每個字母與陣列下標繫結不就能快速查詢...
雜湊表的簡單理解
我們要在陣列或者煉表裡查詢乙個指定得資料,唯一能做得事情就是遍歷的去查詢,這樣的時間複雜度是o n 那有沒有一種方法可以以o 1 的時間複雜度找到這個資料呢?現在來想這個乙個問題,現實生活中我們的衣物都是分類存放的,放的時候根據是什麼種類的衣物放到指定的地方,取的時候依照要取的衣物種類去指定的地方找...