java bitmap取出数据库_bitmap一般如何取出其所表示的数据(以java为例)

利用bitmap进行排序,装入数据的时候只需要位运算设置1,那么取出数据的时候一般是怎么把标记为1的位转换成10进制的数?例如假设一个byte存储0-7的数据信息,那么如何将0000,1000转换成3(0000,0011).

简单例子: 用一个32位的int表示0-31的数据,并对一个数组排序输出

public static void main(String[] args){

int[] data = new int[]{5,10,15,3,16,17,6,8,11};    //待排序数组

int model = 0;    //bitmap初始化为0

for(int i:data){

model = model|(1<

}

for(int i=1;i<=32;i++){    //遍历32位,判断是否为1,为1的话取出数据

if((model&(1<

//问题来了,如何从model&(1<

}

比如0000,1000 的值是8,即2^3 但因为是bitmap所以对应的值应该是3(右数第4位为1)

简单想法1: 右移循环

int count = 0;

while((((model&(1<>1)!=0){    //每次右移一位以此计算有几位

count++;

}

简单想法2: Math.log()

Math.log();    //底层是c语言库,不知道怎么实现。。

问题整理:

1.一般bitmap取出数据时用什么方法?

2.我的两种想法有什么问题?

3.按照我的想法,既然取出数据还需要一次循环,那么bitmap的O(N)如何体现?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值