首页 java实战 BloomFilter 简单例子

BloomFilter 简单例子

判断是否一个数组是否存在 某个值的时候 import java.util.BitSet; public class Bl…

判断是否一个数组是否存在 某个值的时候

import java.util.BitSet;

public class BloomFilter {
    private int defaultSize = 5000 << 10000;
    private int basic = defaultSize - 1;
    private BitSet bits = new BitSet(defaultSize);

    private int[] lrandom(String key) { // 产生八个随机数并返回
        int[] randomsum = new int[8];
        for (int i = 0; i < 8; i++)
            randomsum[0] = hashCode(key, i + 1);
        return randomsum;
    }

    // 将一个URL加入
    public synchronized void add(String key) {
        int keyCode[] = lrandom(key);
        for (int i = 0; i < 8; i++)
            bits.set(keyCode[i]); // 将指定索引处的位设置为 true
    }



    // 判断一个URL是否存在
    public boolean exist(String key) {
        int keyCode[] = lrandom(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;
    }


    private int hashCode(String key, int Q) {
        int h = 0;
        int off = 0;
        char val[] = key.toCharArray(); // 将此URl转换为一个新的字符数组
        int len = key.length();
        for (int i = 0; i < len; i++) {
            h = (30 + Q) * h + val[off++];
        }
        return basic & h;
    }


    public static void main(String[] args) {
        // TODO Auto-generated method
        long pre = 0;
        long post = 0;
        pre = System.nanoTime();
        BloomFilter f = new BloomFilter(); //初始化
        for(int i=0;i<10000000;i++){
            f.add("http://www.javaweb.top/1"+""+i);
        }
        f.add("http://www.liyongqiang.com/");
        f.add("http://www.javaweb.top/1");
        System.out.println(f.exist("http://www.liyongqiang.com/1"));
        System.out.println(f.exist("http://www.javaweb.top/11112121"));
        post = System.nanoTime();
        System.out.println("Time: " + (post - pre));

    }


}

 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

mysql 统计日期 今天,昨天,上个月,这个月 ,一年

mysql 统计日期 今天,昨天,上个月,这个月 ,一年

查询5分钟前的数据 select * from table where end_date between date_ad...
Illegal key size or default parameters

Illegal key size or default parameters

简介: java中使用AES对称加密后,请求报错: Caused by: java.lang.RuntimeExcept...
nginx跨域问题

nginx跨域问题

add_header Access-Control-Allow-Origin *; add_header Access-...
Ajax请求发送成功但不进success的解决方法

Ajax请求发送成功但不进success的解决方法

dataType:’Text’ 格式严格按照服务端返回的数据来
【java】post请求参数全大写后台接不到参数

【java】post请求参数全大写后台接不到参数

测试验证的时候发现,接收不到请求参数   驼峰正常 springMVC使用的是Jackson来解析json格式的请求报文...
返回顶部