BitMap的原理以及运用

位图(BitMap)是一种高效的数据结构,常用于记录大量0-1状态。本文介绍了BitMap的基本原理,通过Java中的BitSet实现展示了如何存储和处理数据。BitMap在处理大规模数据,特别是判断数据存不存在的问题上,能显著节省存储空间。同时,文章讨论了BitMap在处理大数据问题的场景,如数组判重、排序和快速查找,并提到了其在数据碰撞和稀疏性方面的挑战,以及Bloom Filter和Roaring Bitmap作为解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

位图(Bitmap),即位(Bit)的集合,是一种数据结构,可用于记录大量的0-1状态,在很多地方都会用到,比如Linux内核(如inode,磁盘块)、Bloom Filter算法等,其优势是可以在一个非常高的空间利用率下保存大量0-1状态。

 

BitMap的原理

  BitMap 的基本原理就是用一个bit 位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。

  举例:Java里面一个int类型占4个字节,假如要对于10亿int数据进行处理呢?10亿*4/1024/1024/1024=4个G左右,需要4个G的内存。  

            如果能够采用bit储,10_0000_0000Bit=1_2500_0000byte=122070KB=119MB, 那么在存储空间方面可以大大节省。

  在Java里面,BitMap已经有对应实现的数据结构类java.util.BitSet,BitSet的底层使用的是long类型的数组来存储元素。

  我们来看看具体存储:

  对于1,3,5,7这四个数,如果存在的话,则可以这样表示:

  

  1代表这个数存在,0代表不存在。例如表中01010101代表1,3,5,7存在,0,2,4,6不存在。那如果8,10,14也存在怎么存呢?如图,8,10,14我们可以存在第二个字节里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值