目录
一、布隆过滤器介绍
布隆过滤器实际上是一个很长的二进制向量【位数组】和一系列随机哈希映射函数【是为了减少误判】,每个哈希函数会映射元素到位数组中某一位上。主要用于检索一个元素是否在一个集合中。 一次查询返回的结果是可能在集合里或者绝对不在集合里。
原理:当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了。如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能存在。
优点是空间效率和查询时间都远远超过一般的算法;
缺点是有一定的误识别率和删除困难。
操作方式:
添加:设置每一个哈希函数映射到的位为1。
查询:查询每一个哈希函数映射到的位是否都为1。只要有任意一个位不为1,则表明该元素绝对不存在。如果都为1,但也只能表明该元素可能存在(对于一般的bloom filter实现)。 删除:不支持。
二、布隆过滤器源码解读
1、以guava的BloomFilter源码进行解读
使用Bloom Filter时,会由预估数据量n和期望的误判率fpp会计算出hash函数选取个数和bit数组大小;</