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