布隆过滤器

布隆过滤器

1. 作用

判断某一个值是否存在

2. 组成

很长的二进制数组和一系列hash函数

3. 使用

使用hash函数对该值进行hash运算,并将布隆过滤器中相应的位置设置为1

4. 判断某一个数据在布隆过滤器中是否存在

对该值使用布隆过滤器的一系列hash函数进行hash运算,然后判断对应的位置是否都为1。
如果某一个位置不为1,就说明该值在布隆过滤器中一定是不存在的。
如果进行hash运算后所有的位置都为1,不能说明该值在布隆过滤器中一定存在。存在误判的可能。
数组长度越短,误判率越高;数组越大误判率越低,但存在更多的内存消耗。

5. 布隆过滤器不支持数据删除,解决方法:重建新的布隆过滤器

6. 布隆过滤器的使用

  1. 在pom.xml文件中加入布隆过滤器的依赖
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>
  1. 入门案例
/**
         * funnel:指定布隆过滤器中存储的数据的类型
         * expectedInsertions:指定布隆过滤器中存储的数据的个数
         * fpp:误判率
         */
        // 创建布隆过滤器
        BloomFilter<Long> bloomFilter = BloomFilter.create(Funnels.longFunnel(), 1000000, 0.000001);

        // 向布隆过滤器中添加数据
        bloomFilter.put(48L);
        bloomFilter.put(49L);
        bloomFilter.put(50L);

        // 判断布隆过滤器中的数据是否存在
        boolean b1 = bloomFilter.mightContain(48L);
        boolean b2 = bloomFilter.mightContain(50L);
        boolean b3 = bloomFilter.mightContain(51L);

        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
posted @ 2023-08-07 17:03  摆烂ing  阅读(28)  评论(0)    收藏  举报