Code highlighting produced by Actipro CodeHighlighter (freeware) |
http://www.CodeHighlighter.com/ |
|
-->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 = "stone2083@yahoo.cn"; |
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 = new SimpleHash(DEFAULT_SIZE, seeds); |
} |
} |
|
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; |
} |
|
} |
|
} |