随着我们不断生成和处理大量数据,我们面临的最大挑战之一就是找到有效的存储方法。举个例子,在处理40亿个unsigned int的情况下,直接使用内存存储需要14.9G的空间,而使用位图则只需要476M的空间,大大节省了存储空间。
比如要把我的QQ号"907607222"放到Bitmap中,就需要找到第907607222这个位置,然后把他设置成1就可以了。
位图的基本思想是使用一个bit来标记元素,每个位置都是一个bit,即所谓的bit数组。
例如我们想要记录1、4和6这三个整型,如果不用位图,需要使用三个unsigned int,占用96个bit。但是使用位图,只需要占用3个bit,对应1、4和6的位置分别设置为1,其余位置设置为0。
像上面的这个位图,可以用来表示1,4,6:
位图最大的好处是节省空间,因此非常适合用于去重、排序等场景。著名的布隆过滤器就是基于位图实现的数据结构。然而,由于位图只能表示0或1,不能存储其他数字,因此只适用于能表示true或false的场景。
总之,位图是一种高效的数据结构,特别适合处理大量数据。