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实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下载不了java应用程序_Java 7u
- 下一篇: java如何通过grpc连接etcd_g