这个布隆过滤器好像没啥用啊,实战用它判断不是炸了
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import java.nio.charset.Charset;
public class Test1 {
public static void main(String[] args) {
int count = 0;
BloomFilter<String> bf = null;
int expectedInsertions = 0;
//expectedInsertions为1000
expectedInsertions=1000;
bf = BloomFilter.create(
Funnels.stringFunnel(Charset.forName("utf-8")),expectedInsertions);
for (int i = 0; i < 100000; i++) {
bf.put(String.valueOf(i));
}
for (int i = 0; i < 1000; i++) {
boolean isExist = bf.mightContain(String.valueOf("imooc"+i));
if(isExist){
count++;
}
}
System.out.println("长度为"+expectedInsertions+",count="+count);
count = 0;
expectedInsertions=10000;
bf = BloomFilter.create(
Funnels.stringFunnel(Charset.forName("utf-8")),expectedInsertions);
for (int i = 0; i < 100000; i++) {
bf.put(String.valueOf(i));
}
for (int i = 0; i < 1000; i++) {
boolean isExist = bf.mightContain(String.valueOf("imooc"+i));
if(isExist){
count++;
}
}
System.out.println("长度为"+expectedInsertions+",count="+count);
count = 0;
expectedInsertions=100000;
bf = BloomFilter.create(
Funnels.stringFunnel(Charset.forName("utf-8")),expectedInsertions);
for (int i = 0; i < 100000; i++) {
bf.put(String.valueOf(i));
}
for (int i = 0; i < 1000; i++) {
boolean isExist = bf.mightContain(String.valueOf("imooc"+i));
if(isExist){
count++;
}
}
System.out.println("长度为"+expectedInsertions+",count="+count);
count = 0;
expectedInsertions=1000000;
bf = BloomFilter.create(
Funnels.stringFunnel(Charset.forName("utf-8")),expectedInsertions);
for (int i = 0; i < 100000; i++) {
bf.put(String.valueOf(i));
}
for (int i = 0; i < 1000; i++) {
boolean isExist = bf.mightContain(String.valueOf("imooc"+i));
if(isExist){
count++;
}
}
System.out.println("长度为"+expectedInsertions+",count="+count);
count = 0;
}
}
然后结果如下:
长度为1000,count=1000
长度为10000,count=992
长度为100000,count=40
长度为1000000,count=0
关键,1000长度的时候,他的误判率是99.2%,不是0.8%...
要把误判率降下来,得把长度加到和里面元素个数差不多...数据假如几亿条,开这么长的数组不是炸了.
正在回答
我们不用这个的,布隆过滤器不严谨。缓存设为空。或者缓存预热即可
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星