布隆过滤器应用DEMO

不存在的一定不存在,存在的不一定存在。

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

 

public class BloomFilterDemo {
    private static final int insertions = 1000000;

    public static void main(String[] args) {
        //初始化一个存储string的布隆过滤器,初始大小100w 默认误判率是0.03
        BloomFilter<String> bf = BloomFilter.create(Funnels.stringFunnel(UTF_8), insertions,0.01);
        //用于存放所有实际存在的key,判断key是否存在
        Set<String> sets = new HashSet<>();
        //用于存放所有实际存在的key,可以取出使用
        List<String> list = new ArrayList<>(insertions);
        //向三个容器初始化100w个随机并且唯一的字符串
        for (int i = 0; i < insertions; i++) {
            String uuid = UUID.randomUUID().toString();
            bf.put(uuid);
            sets.add(uuid);
            list.add(uuid);
        }

        int right = 0;//正确判断的次数
        int wrong = 0;//错误判断的次数
        for (int i = 0; i < 10000; i++) {
            String data = i % 100 == 0 ? list.get(i / 100) : UUID.randomUUID().toString();
            if (bf.mightContain(data)) {
                if (sets.contains(data)){
                    // 判断实际存在
                    right++;
                    continue;
                }
                //布隆过滤器判断存在,但实际不存在
                wrong++;
            }
        }
        float percent = (float)wrong / 9900;
        System.out.println("100个实际存在的元素,判断存在的:" + right);
        System.out.println("9900个实际不存在的元素,误认为存在的:" + wrong + ",误判率:" + percent);
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值