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
	}
}
⚠️ **GitHub.com Fallback** ⚠️