另一方面,显然bloom过滤器的结构bloom过滤器本身是长的二进制向量,既然是二进制的向量,所以存储的不是0也不是1。
如图所示,创建新的16位布隆过滤器
有我们通过的对象
方式计算他的混列值,得到混列=2
方式2计算他的混列值,得到混列=9
方式3计算他的散列值,得到hash=5
用三种方法计算可以得到三个数值。 将这三个数字对应的布隆过滤器向量值更改为1,表示该位置有值。
当获得值16-3时,第二个对象将16-3更改为1
对于光晕过滤器本身,没有存储任何数据,只是计算该数据的位置并存储向量值
那么,如果需要确定模糊滤波器中是否存在某一数据,则可以确定所计算的所有向量值是否都是1。
但是,随着存储的数据向量增加,可能会出现2 9 5个向量的值都为1但实际上没有该数据的情况。 布隆过滤器只能判断某个数据一定不存在,但不能保证某个数据一定存在。
布隆过滤器也无法删除数据,因为一个向量位置可能映射到多个对象
二、布隆过滤器的设计,如果矢量长短,误判率直线上升。
向量太长会浪费大量的内存。
计算次数过多会消耗计算资源,便于立即填充过滤器。
三、代码实现对POM文件的依赖
ependencygroupidcom.Google.guava/groupidartifactidguava/artifactidversion 25.1-JRE/version/dependency/dendency
创建1亿个publicstaticvoidmain (string . args ) { /** *插入对象,误报率为0.01%的布隆过滤器*/bloomfiltercharsequencebloomfilter=bloom filter.create (funnels.string funnel (charset.forname ) ) ) ) ) boomfilter.put('122 ); boomfilter.put('123 ); system.out.println (bloom filter.might contain (' 121 ' ); }