前言
Bloom过滤器,通过将字符串映射为信息指纹从而节省了空间。Bloom过滤器的原理为,将一个字符串通过一定算法映射为八个Hash值,将八个Hash值对应位置的Bitset位进行填充。在进行校验的时候,通过同样的算法计算八个Hash值,八个Hash值全部存在才可以认定为该字符串在集合中存在。 四个Hash值的布隆过滤器:
通过这样的一个算法,可以无需将字符串的MD5值存储在内存中,只需要定义一定长度的Bitset即可,从而大大节约了空间。
应用场景
Bloom过滤器可以广泛应用于判断集合中是否存在某个元素的大量数据场景,比如黑名单、爬虫访问记录。
实现
关于布隆过滤器的实现,代码如下:
import java.util.BitSet;
/*
简单的Bloom过滤器实现
*/
public class BloomDemo {
private static final int SIZE = 1<<24;
BitSet bitSet=new BitSet(SIZE);
Hash[] hashs=new Hash[8];
private static final int seeds[]=new int[]{3,5,7,9,11,13,17,19};
public static void main(String[] args) {
S