日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bitmap的java原理_布隆算法的原理及JAVA实现

發布時間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bitmap的java原理_布隆算法的原理及JAVA实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Bloom Filter是由Bloom在1970年提出的一種多哈希函數映射的快速查找算法。通常應用在一些需要快速判斷某個元素是否屬于集合,但是并不嚴格要求100%正確的場合。

Bloom Filter是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表示一個集合,并能判斷一個元素是否屬于這個集合。Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節省。

比如10億個int類型的數,如果用int數組存儲的話,那么需要大約4G內存,浪費內存。如果用bitmap解決,就比較方便。java語言中沒有bitmap結構,我們采用byte模擬。一個byte占8個bit,如果每一個bit的值是1或0,代表有或沒有。下圖所示:

構建特定長度的byte數組(new byte[capacity/8 + 1]),其中capacity為整數數組長度(如:1000個數字,就是1000/8)

計算數字num在byte[]中的位置索引(num/8和num >> 3一樣),也就是說num在byte[k]中的索引,計算索引k

計算數字num在byte中的位置,就是在byte的第幾位,每個byte有8位(num % 8),采用二進程與計算

找到該數字存儲位置后,將bit中的0變成1,即表示該數已存在bitmap中,如圖

判斷指定數字num是否存在數組中

完整代碼:

總結

以上是生活随笔為你收集整理的bitmap的java原理_布隆算法的原理及JAVA实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。