1. 程式人生 > >布隆過濾器應用DEMO

布隆過濾器應用DEMO

引入jar包

<dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>21.0</version>
    </dependency>

程式碼示例:

 1 public class BloomFilterDemo {
 2     private static final int insertions = 1000000;
 3 
 4     public
static void main(String[] args) { 5 //初始化一個儲存string的布隆過濾器,初始大小100w 預設誤判率是0.03 6 BloomFilter<String> bf = BloomFilter.create(Funnels.stringFunnel(UTF_8), insertions,0.01); 7 //用於存放所有實際存在的key,判斷key是否存在 8 Set<String> sets = new HashSet<>(); 9 //用於存放所有實際存在的key,可以取出使用
10 List<String> list = new ArrayList<>(insertions); 11 //向三個容器初始化100w個隨機並且唯一的字串 12 for (int i = 0; i < insertions; i++) { 13 String uuid = UUID.randomUUID().toString(); 14 bf.put(uuid); 15 sets.add(uuid); 16 list.add(uuid);
17 } 18 19 int right = 0;//正確判斷的次數 20 int wrong = 0;//錯誤判斷的次數 21 for (int i = 0; i < 10000; i++) { 22 String data = i % 100 == 0 ? list.get(i / 100) : UUID.randomUUID().toString(); 23 if (bf.mightContain(data)) { 24 if (sets.contains(data)){ 25 // 判斷實際存在 26 right++; 27 continue; 28 } 29 //布隆過濾器判斷存在,但實際不存在 30 wrong++; 31 } 32 } 33 float percent = (float)wrong / 9900; 34 System.out.println("100個實際存在的元素,判斷存在的:" + right); 35 System.out.println("9900個實際不存在的元素,誤認為存在的:" + wrong + ",誤判率:" + percent); 36 } 37 }

輸出結果:

100個實際存在的元素,判斷存在的:100
9900個實際不存在的元素,誤認為存在的:97,誤判率:0.00979798