布隆过滤器
布隆过滤器
1. 作用
判断某一个值是否存在
2. 组成
很长的二进制数组和一系列hash函数
3. 使用
使用hash函数对该值进行hash运算,并将布隆过滤器中相应的位置设置为1
4. 判断某一个数据在布隆过滤器中是否存在
对该值使用布隆过滤器的一系列hash函数进行hash运算,然后判断对应的位置是否都为1。
如果某一个位置不为1,就说明该值在布隆过滤器中一定是不存在的。
如果进行hash运算后所有的位置都为1,不能说明该值在布隆过滤器中一定存在。存在误判的可能。
数组长度越短,误判率越高;数组越大误判率越低,但存在更多的内存消耗。
5. 布隆过滤器不支持数据删除,解决方法:重建新的布隆过滤器
6. 布隆过滤器的使用
- 在pom.xml文件中加入布隆过滤器的依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
- 入门案例
/**
* 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);
作者:摆烂ing
出处:http://www.cnblogs.com/insilently/
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必追究法律责任
出处:http://www.cnblogs.com/insilently/
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必追究法律责任
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能