BitMap(位图)实现原理笔记

BitMap : 在java中,一个int类型占4个字节,32个比特位.现在创建一个int数组 new int[32],总计32 * 32bit;如果用int字节码的每一位表示一个数,那么32个数字只需要一个int类型所占的内存空间大小就够了. ----- 类似一个压缩标记算法.


1个int占4字节即4*8=32位,那么我们只需要申请一个int数组长度为 int tmp[1+N/32]即可存储完这些数据,其中N代表要进行查找的总数,tmp中的每个元素在内存在占32位可以对应表示十进制数0~31,所以可得到BitMap表:

tmp[0]:可表示0~31

tmp[1]:可表示32~63

tmp[2]可表示64~95

那么接下来就看看十进制数如何转换为对应的bit位:

假设这40亿int数据为:6,3,8,32,36,…,那么具体的BitMap表示为:
  
在这里插入图片描述
  如何判断int数字在tmp数组的那个位置?
  例:
  1) 8 / 32 = 0 整数8除以32得整数部分为0,那么整数8在tmp[0]的数组上;
  2) 8%32 = 8 整数8模32得8,那么整数8在tmp[0]数组 从右向左的 第八个位置上(位置计算从0开始计数,数到8的位置)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值