關於hash
https://www.zhihu.com/question/26762707
csdn
前面提到了hash算法是一定會有衝突的,那麼如果我們如果遇到了hash衝突需要解決的時候應該怎麼處理呢?比較常用的算法是鏈地址法和開放地址法。vvn
鏈地址在處理的流程如下:
添加一個元素的時候,首先計算元素key的hash值,確定插入數組中的位置。如果當前位置下沒有重複數據,則直接添加到當前位置。當遇到衝突的時候,添加到同一個hash值的元素後面,行成一個鏈表。這個鏈表的特點是同一個鏈表上的Hash值相同。java的數據結構HashMap使用的就是這種方法來處理衝突,JDK1.8中,針對鏈表上的數據超過8條的時候,使用了紅黑樹進行優化。由於篇幅原因,這裏不深入討論相關數據結構,有興趣的同學可以參考這篇文章:
作者:騰訊技術工程
鏈接:https://www.zhihu.com/question/26762707/answer/890181997
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
我們活動開發經常遇到的應用場景是信息加密、數據校驗、負載均衡
5.3 布隆過濾器
布隆過濾器被廣泛用於黑名單過濾、垃圾郵件過濾、爬蟲判重系統以及緩存穿透問題。對於數量小,內存足夠大的情況,我們可以直接用hashMap或者hashSet就可以滿足這個活動需求了。但是如果數據量非常大,比如5TB的硬盤上放滿了用戶的參與數據,需要一個算法對這些數據進行去重,取得活動的去重參與用戶數。這種時候,布隆過濾器就是一種比較好的解決方案了。
作者:騰訊技術工程
鏈接:https://www.zhihu.com/question/26762707/answer/890181997
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。