代码实现 package com.f.fmodules.fuser.bloom;
import com.google.common.base.Charsets;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import java.util.*;
public class BloomFilterDemo {
public static void main(String[] args) {
final int count = 500000;
List<String> stringList = new ArrayList<>(count);
Set<String> stringSet = new HashSet<>();
//建立布隆过滤器 初始化过滤器数据
BloomFilter<String> bloomString = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8),count);
for (int i =0;i< count;i++){
String id = UUID.randomUUID().toString();
stringList.add(id);
stringSet.add(id);
bloomString.put(id);
}
int wrong = 0;
int right = 0;
for (int i =0;i< count; i++) {
String checkString = i % 100 == 0 ? stringList.get(i) : UUID.randomUUID().toString();
//布隆过滤器 进过hash算法和byte数组 校验是否存在于集合中
if (bloomString.mightContain(checkString)){
//校验是否误判
if (stringSet.contains(checkString)){
right++;
}else{
wrong++;
}
}
}
System.out.println("50万测试数据-->共抵挡: "+(count - wrong - right)+"次非法入侵"+" 误判"+wrong);
}
}