布隆过滤器
1. 作用
判断某一个值是否存在
2. 组成
很长的二进制数组和一系列hash函数
3. 使用
使用hash函数对该值进行hash运算,并将布隆过滤器中相应的位置设置为1
4. 判断某一个数据在布隆过滤器中是否存在
对该值使用布隆过滤器的一系列hash函数进行hash运算,然后判断对应的位置是否都为1。
如果某一个位置不为1,就说明该值在布隆过滤器中一定是不存在的。
如果进行hash运算后所有的位置都为1,不能说明该值在布隆过滤器中一定存在。存在误判的可能。
数组长度越短,误判率越高;数组越大误判率越低,但存在更多的内存消耗。
5. 布隆过滤器不支持数据删除,解决方法:重建新的布隆过滤器
6. 布隆过滤器的使用
- 在pom.xml文件中加入布隆过滤器的依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
- 入门案例
/**
* 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);
标签:hash,误判,布隆,该值,过滤器,bloomFilter
From: https://www.cnblogs.com/insilently/p/17608396.html