为了方便理解布隆过滤器,java简单实现了下,
特点:仅用做一次运算就可以判断存在不存在,但是只能精确的判断值不存在,不能精确的判断值存在
public class BlTest {
private final int f = 1024; // 负载因子,值越大判断的越精准,但是所占的空间也越大
int[] bArray;
BlTest(){
this.bArray=new int[f];
}
void addKey(String s){
int i = s.hashCode() % f;// 不同字符串取模后的值可能相同,所以会存在哈希碰撞。
if(bArray[i]!=1){
bArray[i]=1;
}
}
boolean exists(String s){
return bArray[s.hashCode() % f]==1;
}
public static void main(String[] args) {
BlTest blTest = new BlTest();
blTest.addKey("ddd");
blTest.addKey("ccc");
System.out.println(blTest.exists("aaa"));
System.out.println(blTest.exists("ddd"));
System.out.println(blTest.exists("ccc"));
}
}
标签:bArray,java,exists,int,布隆,System,blTest,过滤器,BlTest
From: https://www.cnblogs.com/AngeLeyes/p/17445652.html