//创建bloomFilter类
public class bloomFilter {
private static final int DEFAULT_SIZE =10 << 24 ;
//获取输入值的要比较的字符位置
private static final int [] seeds =new int []{1,4,7,10,12 ,14,16};
//设置bits存储空间大小
private BitSet bits= new BitSet(DEFAULT_SIZE);
private SimpleHash[] func=new SimpleHash[seeds.length];
public bloomFilter() {
for( int i= 0 ; i< seeds.length; i ++ ) {
func[i]=new SimpleHash(DEFAULT_SIZE, seeds[i]);
}
}
//往bits中添加
public void add(String value) {
for(SimpleHash f : func) {
bits.set(f.hash(value), true );
}
}
//判断是否有已有value的标记
public boolean contains(String value) {
if(value ==null ) {
return false ;
}
boolean ret = true ;
for(SimpleHash f : func) {
//get Hash的方法返回的总数查看是否为true
ret=ret&& bits.get(f.hash(value));
}
return ret;
}
//内部类,simpleHash
public static class SimpleHash {
private int cap;
private int seed;
public SimpleHash( int cap, int seed) {
this.cap= cap;
this.seed =seed;
}
//公共方法(根据带入的seed,循环带入值的len,最后得到总和返回。)
public int hash(String value) {
int result=0 ;
int len= value.length();
for (int i= 0 ; i< len; i ++ ) {
result =seed* result + value.charAt(i);
}
return (cap - 1 ) & result;
}
}
public static void main(String[] args) {
bloomFilter filter=new bloomFilter();
String values = "stone2083@yahoo.cn,baidu@dd.cn" ;
for(String value:values.split(",")){
System.out.println(filter.contains(value));
filter.add(value);
System.out.println(filter.contains(value));
}
}
}
public class bloomFilter {
private static final int DEFAULT_SIZE =10 << 24 ;
//获取输入值的要比较的字符位置
private static final int [] seeds =new int []{1,4,7,10,12 ,14,16};
//设置bits存储空间大小
private BitSet bits= new BitSet(DEFAULT_SIZE);
private SimpleHash[] func=new SimpleHash[seeds.length];
public bloomFilter() {
for( int i= 0 ; i< seeds.length; i ++ ) {
func[i]=new SimpleHash(DEFAULT_SIZE, seeds[i]);
}
}
//往bits中添加
public void add(String value) {
for(SimpleHash f : func) {
bits.set(f.hash(value), true );
}
}
//判断是否有已有value的标记
public boolean contains(String value) {
if(value ==null ) {
return false ;
}
boolean ret = true ;
for(SimpleHash f : func) {
//get Hash的方法返回的总数查看是否为true
ret=ret&& bits.get(f.hash(value));
}
return ret;
}
//内部类,simpleHash
public static class SimpleHash {
private int cap;
private int seed;
public SimpleHash( int cap, int seed) {
this.cap= cap;
this.seed =seed;
}
//公共方法(根据带入的seed,循环带入值的len,最后得到总和返回。)
public int hash(String value) {
int result=0 ;
int len= value.length();
for (int i= 0 ; i< len; i ++ ) {
result =seed* result + value.charAt(i);
}
return (cap - 1 ) & result;
}
}
public static void main(String[] args) {
bloomFilter filter=new bloomFilter();
String values = "stone2083@yahoo.cn,baidu@dd.cn" ;
for(String value:values.split(",")){
System.out.println(filter.contains(value));
filter.add(value);
System.out.println(filter.contains(value));
}
}
}