数据结构
采用bit数组+hash函数,用多个不同的hash函数计算相同的值在bit数组上的位置
布隆过滤器的特点:
从容器的角度来说:
1.如果布隆过滤器判断元素在集合中存在,不一定存在
2.如果布隆过滤器判断不存在,一定不存在
从元素的角度来说:
3.如果元素实际存在,布隆过滤器一定判断存在
4.如果元素实际不存在,布隆过滤器可能判断存在
Guava的实现
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
package redis;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
//容器里判断不存在的数据一定不存在
public class BLTest {
public static void main(String[] args) {
//创建布隆过滤器对象,存放500个元素,误判率1%
BloomFilter<Integer> filter = BloomFilter.create(Funnels.integerFunnel(), 500, 0.01);
//判断指定元素是否存在
System.out.println(filter.mightContain(10));
System.out.println(filter.mightContain(20));
//将元素添加进布隆过滤器
filter.put(10);
filter.put(20);
//再判断指定元素是否存在
System.out.println(filter.mightContain(10));
System.out.println(filter.mightContain(20));
}
}