宋子宪博客

布隆过滤器介绍和使用教程

介绍

布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。与哈希表类似,布隆过滤器可以用来测试一个元素是不是集合的成员。但它与哈希表有一个重要的不同之处:虽然它可能会误判,但它绝对不会漏报。

原理

布隆过滤器的原理是基于哈希和位数组。初始时,位数组的每一位都是0。对于集合中的每一个元素,通过k个哈希函数将其映射到k个位置,并将这些位置的值都设置为1。

工作流程:

  1. 添加元素: 对每个添加的元素使用多个哈希函数,得到对应的位数组下标,并将这些位置设置为1。
  2. 查询元素: 使用同样的哈希函数对元素进行哈希,得到对应下标,如果所有的位置都为1,则表示这个元素可能在集合中;否则,元素一定不在集合中。

优点与缺点

优点:

缺点:

使用场景

示例代码

首先,确保你的项目已经引入了Guava库。

<!-- Maven dependency -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>32.1.2-jre</version>
</dependency>
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

public class BloomFilterExample {
    public static void main(String[] args) {
        // 创建布隆过滤器
        BloomFilter<String> filter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), 1000000, 0.01);

        // 添加元素
        filter.put("127.0.0.1");

        // 查询元素
        boolean mightContain = filter.mightContain("127.0.0.1");
        System.out.println(mightContain);  // 输出:true
    }
}

注意事项

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »