SampleBloomFilter 实现

来源:互联网 发布:网络剧一般在哪招演员 编辑:程序博客网 时间:2024/05/18 01:48
public class SampleBloomFilter {    private static final int   DEFAULT_SIZE = 2 << 24;    private static final int[] seeds        = new int[] { 5, 7, 11, 13, 31, 37, 61 };    private BitSet             bits         = new BitSet(DEFAULT_SIZE);    private SimpleHash[]       func         = new SimpleHash[seeds.length];    public SampleBloomFilter() {        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;        }    }}

0 0
原创粉丝点击