public class BloomFilter { private static final HashGenerator.HashGroup[] GROUPS = new HashGenerator.HashGroup[]{HashGenerator.HashGroup.G1, HashGenerator.HashGroup.G2, HashGenerator.HashGroup.G3, HashGenerator.HashGroup.G4}; private final BitSet bits; private HashGenerator[] generators; }
public BloomFilter(int size, int[] seeds) { bits = new BitSet(size); generators = new HashGenerator[seeds.length]; for (int i = 0; i < seeds.length; i++) { generators[i] = new HashGenerator(size, seeds[i], GROUPS[i % GROUPS.length]); } }
构造函数根据所需创建的容器大小和哈希种子来初始化布隆过滤器。
3. 添加元素
public void add(String value) { for (HashGenerator generator : generators) { int hash = generator.doHash(value); bits.set(hash, true); } }
添加元素时按照元素初始化时的哈希计算种类,获取哈希并存放。
4. 比对元素
public boolean contains(String value) { boolean ret = true; for (HashGenerator generator : generators) { ret = ret && bits.get(generator.doHash(value)); } return ret; }