原理在这里: http://www.cnblogs.com/allensun/archive/2011/02/16/1956532.html
构造方法如下:
/**
* 构造Bloom Filter
* @param capacity 支持的最大元素数
* @param errorRate 期望的最大错误率
*/
public LongBloomFilter(int capacity, double errorRate) {
// 计算实际需要的最小位数组长度m
size = (int) Math.abs(capacity * Math.log(errorRate)
/ (Math.log(2) * Math.log(2))) + 1;
// 计算最优的hash函数个数
hashNum = (int) (Math.log(2) * ((double) size / capacity));
bitVecter = new BitSet(size);
}