前言
布隆过滤器(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());
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。