简单实用的布隆过滤器

前言
布隆过滤器(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());
}
}
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理