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)如何体现?
相关阅读:
python把HTML存入Mysql
python中将XML转换为JSON格式
鼠标jquery 鼠标拖动竖线改变div块宽度
前端该怎样实现自动化测试?
Slim框架如何获取当前url?
能不能在文件上传到服务器之前,判断文件是否有重复
C/C++ 如何正确使用链接库的问题?
keepalive工程找不到RecordUtil类
一堆数据如何批量插入数据库?
iOS 百度地图SDK 与导航SDK 文件重复 duplicate symbols 怎么解决 急急急!
js监听键盘事件的使用
bootstrap-table 加载远程数据 无效
docker容器连接后可以互相访问里面的文件吗?
ajax $.get() 报错404
如图所示,grep的表现结果是不是违背我的意思了,还是我理解错了ERE?
Python 中的版本指示语句?
什么叫CI过程?
Java 系统性能分析工具?
json diff?
.h文件里定义了一个类,怎么链接到so文件里?