BloomFilter(布隆过滤器)


package sunfa;

import java.util.BitSet;
import java.util.Random;

/**
* BloomFilter(布隆过滤器)
* http://www.cnblogs.com/allensun/archive/2011/02/16/1956532.html
*
*/
public class BloomFilter {
private int DEFAULT_SIZE = 1 << 6;
private BitSet bitSet = null;// java.util.BitSet的最小长度是1<<6

public BloomFilter() {
init();
}

public BloomFilter(int cmp) {
this.DEFAULT_SIZE = cmp;
init();
}

private void init() {
bitSet = new BitSet(DEFAULT_SIZE);
}

public int size() {
return bitSet.size();
}

private static int oldHash(int h) {
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}

static int indexFor(int h, int length) {
return h & (length - 1);
}

public void add(Object o) {
int i = indexFor(oldHash(o.hashCode()), DEFAULT_SIZE);
bitSet.set(i);
}

public boolean contians(Object o) {
int i = indexFor(oldHash(o.hashCode()), DEFAULT_SIZE);
return bitSet.get(i);
}

public String toString() {
String s = "[";
for (int i = 0; i < bitSet.size(); i++) {
if (bitSet.get(i))
s += i + ",";
}
s += "]";
return s;
}

public static void main(String[] args) {
BloomFilter bloom = new BloomFilter();
System.out.println("bloomFilter.size:" + bloom.size());
Random ran = new Random();
int count = 100;
for (int i = 0; i < count; i++) {
int n = ran.nextInt(100);
System.out.print("before:" + n + "," + bloom.contians(n));
bloom.add(n);
System.out.println("==>after:" + n + "," + bloom.contians(n));
}
System.out.println();
System.out.println(bloom.toString());
}

//幂算法
public static int power(int b, int e) {
if (b == 0 || b == 1 || e == 0) {
return 1;
}
if (1 == e)
return b;
int n = e >> 1;
int tmp = power(b, n);
if (0 == (e & 1))
return tmp * tmp;
else
return tmp * tmp * b;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值