布隆过滤器

布隆过滤器

1. 作用

判断某一个值是否存在

2. 组成

很长的二进制数组和一系列hash函数

3. 使用

使用hash函数对该值进行hash运算,并将布隆过滤器中相应的位置设置为1

4. 判断某一个数据在布隆过滤器中是否存在

对该值使用布隆过滤器的一系列hash函数进行hash运算,然后判断对应的位置是否都为1。
如果某一个位置不为1,就说明该值在布隆过滤器中一定是不存在的。
如果进行hash运算后所有的位置都为1,不能说明该值在布隆过滤器中一定存在。存在误判的可能。
数组长度越短,误判率越高;数组越大误判率越低,但存在更多的内存消耗。

5. 布隆过滤器不支持数据删除,解决方法:重建新的布隆过滤器

6. 布隆过滤器的使用

  1. 在pom.xml文件中加入布隆过滤器的依赖
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>
  1. 入门案例
/**
         * funnel:指定布隆过滤器中存储的数据的类型
         * expectedInsertions:指定布隆过滤器中存储的数据的个数
         * fpp:误判率
         */
        // 创建布隆过滤器
        BloomFilter<Long> bloomFilter = BloomFilter.create(Funnels.longFunnel(), 1000000, 0.000001);

        // 向布隆过滤器中添加数据
        bloomFilter.put(48L);
        bloomFilter.put(49L);
        bloomFilter.put(50L);

        // 判断布隆过滤器中的数据是否存在
        boolean b1 = bloomFilter.mightContain(48L);
        boolean b2 = bloomFilter.mightContain(50L);
        boolean b3 = bloomFilter.mightContain(51L);

        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
posted @   摆烂ing  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示

目录导航