布隆过滤器(BloomFilter)

布隆过滤器(BloomFilter)

资料:
wikipedia--bloom filter

使用场景,原理简介之中文资料:
数学之美系列二十一 - 布隆过滤器(Bloom Filter)

核心内容(摘自Google黑板报文章内容):


BloomFilter简易实现:
public   class  SimpleBloomFilter {

    
private   static   final   int    DEFAULT_SIZE  =   2   <<   24 ;
    
private   static   final   int [] seeds         =   new   int [] {  7 11 13 31 37 61 , };

    
private  BitSet             bits          =   new  BitSet(DEFAULT_SIZE);
    
private  SimpleHash[]       func          =   new  SimpleHash[seeds.length];

    
public   static   void  main(String[] args) {
        String value 
=   " [email protected] " ;
        SimpleBloomFilter filter 
=   new  SimpleBloomFilter();
        System.out.println(filter.contains(value));
        filter.add(value);
        System.out.println(filter.contains(value));
    }

    
public  SimpleBloomFilter() {
        
for  ( int  i  =   0 ; i  <  seeds.length; i ++ ) {
            func[i] 
=   new  SimpleHash(DEFAULT_SIZE, seeds[i]);
        }
    }

    
public   void  add(String value) {
        
for  (SimpleHash f : func) {
            bits.set(f.hash(value), 
true );
        }
    }

    
public   boolean  contains(String value) {
        
if  (value  ==   null ) {
            
return   false ;
        }
        
boolean  ret  =   true ;
        
for  (SimpleHash f : func) {
            ret 
=  ret  &&  bits.get(f.hash(value));
        }
        
return  ret;
    }

    
public   static   class  SimpleHash {

        
private   int  cap;
        
private   int  seed;

        
public  SimpleHash( int  cap,  int  seed) {
            
this .cap  =  cap;
            
this .seed  =  seed;
        }

        
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;
        }

    }

}



你可能感兴趣的:(布隆过滤器(BloomFilter))