栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

布隆过滤器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

布隆过滤器

布隆过滤器

java中使用基础类型拼出比特操作的结构(位图)

int[] arr=new int[10];//32bit*10 -> 320bits
//arr[0] int 0~31
//arr[1] int 32~63

int i=178;//取出第178个bit的状态

int numIndex=178/32;
int bitIndex=178%32;

//取178位状态
int s=((arr[numIndex]>>bitIndex)&1);
//把178位的状态改为1
arr[numIndex]=arr[numIndex]|(1<>(i%32))&1;

布隆过滤器是一个大位图
失误类型:

  • 黑->白X
  • 白->黑V
布隆过滤器(Bloom Filter)优缺点

优点:

  • 布隆过滤器在空间和时间方面都有巨大的优势,存储空间和插入/查询时间都是常数
  • Hash函数之间独立,方便由硬件并行实现
  • 不需要存储元素本省,对于某些保密要求非常严格的场合有优势
  • 布隆过滤器可以表示全集,其他任何数据结构都不能
  • k和m相同,使用同一组Hash函数的两个布隆过滤器的交并差运算可以使用位操作进行
    缺点:
  • 存在误算率(False Positive),随着存入的元素数量增加,误算率随之增加。但是如果元素数量太少,则使用散列表足矣
  • 无法删除元素
Spring Boot中使用

添加redisson的Maven坐标


	org.redisson
	redisson-all
	3.16.0

Java代码

Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
//构造Redisson
RedissonClient redisson = Redisson.create(config);
RBloomFilter bloomFilter = redisson.getBloomFilter("bloom");
//初始化布隆过滤器:预计元素为1000000L,误判率为1%
bloomFilter.tryInit(1000000L,0.01);
bloomFilter.add("1"); //增加数据
//判断指定编号是否在布隆过滤器中
System.out.println(bloomFilter.contains("1")); //输出true
System.out.println(bloomFilter.contains("8888"));//输出false
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号