BloomFilter - 969251639/study GitHub Wiki
布隆过滤器(bloom filter)是以空间换时间的算法。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都超高,缺点是删除困难且有一定的误差。一般由于缓存穿击的过滤和允许一定误差的大数据去重等,google的guava库和stream-lib库实现了该算法,可直接使用
public class BloomFilterTest {
public static void main(String[] args) {
int size = 1000000;//预估存放量
//使用Guava创建布隆过滤器
BloomFilter<String> bloomFilter = BloomFilter.create(new Funnel<String>() {
private static final long serialVersionUID = -3875839408041833342L;
@Override
public void funnel(String from, PrimitiveSink into) {
into.putString(from, Charsets.UTF_8);
}
}, size);
//调用put方法给布隆过滤器塞数据
bloomFilter.put("1");
//mightContain方法可以用来判断数据是否在布隆过滤器中
System.out.println(bloomFilter.mightContain("1"));//输出true
System.out.println(bloomFilter.mightContain("2"));//输出false
//使用Stream-lib库创建布隆过滤器
Filter filter = new com.clearspring.analytics.stream.membership.BloomFilter(size, 0.0001);
filter.add("1");
System.out.println(filter.isPresent("1"));//输出true
System.out.println(filter.isPresent("2"));//输出false
}
}