算法类

BitMap原理

BitMap是指用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间。
例如存储一个Integer类型数字32位,用1个bit位就可以表示,大大节省了内存空间,因为bit位只能用0或者1,所以1表示存在,0表示不存在,其中数组下标的key值则代表该元素。如用bit数组表示(2,4,7),从0开始,下标为2,4和7的地方,对应的bit值为1。

00101001
                 2             4                     7

Java代码实现原理

因为Java中没有bit数据类型,我们以字节Byte类型代替,一个字节有8个bit,所以我们在用Byte数组来将目标值转换为bit。比如说21在字节数组中为下图:

00000000
76543210
                         Byte[0]
00000000
15141312111098
		     Byte[1]
00100000
2322212019181716
		     Byte[2]

上图可以看到Byte[2]中的第6位(下标从0开始则是5)值表示为1。
因此数num,其在
Byte数组的下标为 m = num/8 = n>>3
在bit上的位数下标为 n = num%8

利用bitmap中添加一个数则算法为
Byte[m] |= 1<<n
即先将1向左移动n个位置,代表此位置值为1,其余为0,然后与Byte[m]进行或运算,即将该值添加进BitMap中,同理也可以用于删除查找等等。

链接: https://mp.csdn.net/mdeditor/103057655.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值