前言
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
而在 Java 中有个 BitSet(位向量),我们可以基于 BitSet 实现一个简单实用的布隆过滤器。
实现代码
import java.util.BitSet;
/**
* 布隆过滤器
* @author RJH
* create at 2019-03-25
*/
public class BloomFilter<T> {
private BitSet data;
public BloomFilter() {
this.data = new BitSet();
}
/**
* 将元素加入到过滤器
* @param t
*/
public void add(T t){
if(t==null){// 为 null 时,索引为 0
data.set(0);
}else{
data.set(t.hashCode());
}
}
/**
* 判断元素是否在过滤器中 <br/>
* @param t
* @return true 为存在,false 为不存在
*/
public boolean filter(T t){
if(t==null){// 为 null 时,索引为 0
return data.get(0);
}else{
return data.get(t.hashCode());
}
}
}