我的理解是:位图是内存中连续的二进制位(bit),可以用作对大量整形做去重和统计....引入一个小栗子来帮助理解一下:
假如我们要存储三个int数字 (1,3,5),在java中我们用一个int数组来存储,那么占用了12个字节.但是我们申请一个bit数组的话.并且把相应下标的位置为1,也是可以表示相同的含义的...在业务的逻辑为: 用户存在和是否签到两个bool值,共四种组合.
用户存在,且签到了. 两个集合的对应位都为1,那么结果就为0.
用户存在,但是没签到. 全集对应位为1,签到为0,所以结果是1....用户不存在,那么必然没可能签到, 两个集合的对应位都是0,结果为0.
所以结果中,为1的只有一种可能:用户存在且没有签到,正好是我们所求的结果....我们可以转换为: 每天的每个用户是否签到,就变为了布尔类型的数据.
Java中的位图
上面讲了位图的原理,那么我们先来自己手动实现一个!