位图BitMap

一、位图简介

用二进制的每一位来压缩存放很多数据的状态,通常用于判断某个数据是否存在。如果某个数字存在就在对应位置置为1,比如标识0、8、22三个数字存在。
在这里插入图片描述
位图的大小取决于要存放的数据范围,数据到下标的对应关系需自行设计,超过32位可分段存储。

二、位图常见操作

2.1 采用位运算快速将某个位置置为1

采用按位或

int bitMap;
public void setBit(int pos) {
	int bit = 1 << pos;
	bitMap |= bit;
}

采用按位异或
调用两次的话即可将对应位置清0

int bitMap;
public void setBit(int pos) {
	int bit = 1 << pos;
	bitMap ^= bit;
}

2.2 判断某数字是否存在(判断某位置是否为1)

按位与结果为0表示不存在

int bitMap;
public bool exist(int pos) {
	int bit = 1 << pos;
	return bitMap & bit != 0;
}

三、布隆过滤器 BloomFilter

3.1 布隆过滤器简介

布隆(Burton Howard Bloom)1970年提出,由一个很长的二进制向量和一系列随机映射函数组成,用于检索一个元素是否在一个集合中。
在这里插入图片描述

3.2 优点、缺点及应用

优点:
• 空间利用率高,查询效率快,不保存数据本身安全性好
• 不存在漏报(实际存在的元素不会被检测为不存在)

缺点
• 有一定的误判率(实际不存在的元素被检测为存在)
• 删除困难

应用场景
防缓存击穿(数以十亿级别数据量)

在这里插入图片描述

3.3 应用举例

对url做过滤排重,检查我们的系统中该域名是否存在
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值