class BloomFilterDemo {
private int defaultSize = 16 << 24;
private int maxIndex = defaultSize - 1;
private BitSet bits = new BitSet(defaultSize);
public void add(String key) {
int bloomCode[] = getCode(key);
for (int i = 0; i < 8; i++) {
bits.set(bloomCode[i]);
}
}
private int[] getCode(String key) {
int[] randomArr = new int[8];
for (int i = 0; i < 8; i++) {
randomArr[i] = hash(key, i);
}
return randomArr;
}
private int hash(String key, int n) {
int result = key.hashCode() * n;
return result & maxIndex;
}
public boolean exits(String key) {
int keyCode[] = getCode(key);
if (bits.get(keyCode[0]) && bits.get(keyCode[1])
&& bits.get(keyCode[2]) && bits.get(keyCode[3])
&& bits.get(keyCode[4]) && bits.get(keyCode[5])
&& bits.get(keyCode[6]) && bits.get(keyCode[7])) {
return true;
}
return false;
}
}
public class BloomFilter {
public static void main(String[] args) {
BloomFilterDemo bf = new BloomFilterDemo();
Long aBeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
bf.add("Java" + i);
}
Long aEndTime = System.currentTimeMillis();
System.out.println("Insert Time-->" + (aEndTime - aBeginTime));
Long lBeginTime = System.currentTimeMillis();
System.out.println(bf.exits("Java" + 99139));
Long lEndTime = System.currentTimeMillis();
System.out.println("Search Time--->" + (lEndTime - lBeginTime));
}
}