BitMap思想分析

本文介绍了BitMap的核心思想——用位表示数据以节省存储空间,并探讨了其在处理大规模数据时的应用场景,如统计唯一整数、无重复整数排序和电话号码计数。同时,提到了其优点,如存储效率高,以及不足,如数据碰撞和稀疏数据问题,并提及了解决方案Bloom Filter和Roaring BitMap。
摘要由CSDN通过智能技术生成

1.什么是bitmap

我们知道很多常见的存储结构,数组、链表、散列表等容器。那么BitMap是什么呢?我们先一起看看,再分析为什么需要bitmap。

 

我们知道一个int占据4个字节,32个bit,比如我存储一个int数据,值为8,那么存储结构如下:

00000000 00000000 00000000 00100000

 

一共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表示为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值