# 布隆过滤器
布隆过滤器的核心就是一个位图和k 个不同的哈希函数
当我们想往布隆过滤器中添加一个元素时，我们用 k 个哈希函数对这个元素进行哈希计算，得到 
k 个不同的哈希值，这些哈希值就是位图的索引。然后我们把位图中的这几个索引对应的位都设置成 1。

当我们想判断一个元素是否存在于布隆过滤器时，我们也是用 k 个哈希函数对这个元素进行哈希计算，得到 
k 个索引。然后我们去看位图中的这 k 个索引对应的位是否全部为 1。如果其中有一个位不为 1，那么这个元素一定不存在于集合中。如果这 k 个位都为 1，那么这个元素**可能存在**于集合中。

为什么是可能存在呢？
因为随着布隆过滤器中存入的元素越来越多，位图中的这几个索引可能恰巧被其他元素设置成了 1，这就是所谓的假阳性误判（false positive）。
![](</document-assets/data-structure-bloom-filter/1d0fcb519cd797f7bd7307fca9f3509f112c715d800c1be01fa7385392f883c1.png>)
