首页 > 其他 > 详细

布隆过滤器应用DEMO

时间:2018-11-25 19:14:39      阅读:180      评论:0      收藏:0      [点我收藏+]

引入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

 

布隆过滤器应用DEMO

原文:https://www.cnblogs.com/chinano1/p/10016368.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!