您的位置:首页 > 大数据

java实现bit-map算法存储大数据

2017-03-24 11:44 399 查看
import java.util.*;

public class BitMap {
private static final byte B=1;
private static final byte KB=2;
private static final byte MB=3;
private static final byte GB=4;
private static final byte [] bit=new byte[]{1,2,4,8,16,32,64,-128};    //{1,2,4,8,16,32,64,-128};
private int mAvailableSize;
private static int mMemory;
private static byte[] mArray;
public BitMap()
{
mMemory=0;
}
public BitMap(int memory, int unit) {
switch (unit) {
case B:
mMemory=memory;
break;
case KB:
mMemory=memory*1024;
break;
case MB:
mMemory=memory*1024*1024;
break;
case GB:
mMemory=memory*1024*1024*1024;
break;
default:
break;
}
mArray=new byte[mMemory];
mAvailableSize=mMemory*8;
}

public boolean add(int num){
if((num+8)/8>mMemory)
return false;
else{
mArray[num/8]|=bit[num%8];
mAvailableSize--;
return true;
}
}
//检查此元素是否存在
public boolean isInMap(int num) {
if((num+8)/8>mMemory){
return false;
}
return( (mArray[num/8] & bit[num%8])!=0);
}
//返回能存储的数据个数
public int getMemory(){
return mAvailableSize;
}
//获取存取的数
public ArrayList<Integer> getElements()
{
ArrayList<Integer> list=new ArrayList<>();
for (int i = 0; i < mArray.length; i++) {
for (int j = 0; j < bit.length; j++) {
if((mArray[i] & bit[j])!=0)
{
int num=8*i+j;
list.add(num);
}
}
}
return list;
}
public static void main(String[] args){
BitMap bm=new BitMap(20,1);
System.out.println(bm.getMemory());
bm.add(0);
bm.add(1);
bm.add(2);
bm.add(7);
bm.add(42);
bm.add(43);
bm.add(57);
bm.add(50);
bm.add(55);
bm.add(63);
bm.add(10);
bm.add(17);
bm.add(20);
bm.add(27);
bm.add(30);
System.out.println(bm.getMemory());
System.out.println(bm.isInMap(7));
ArrayList<Integer> listNum=bm.getElements();
for (int i = 0; i < listNum.size(); i++) {
System.out.println(listNum.get(i));
}
//    	String tString = Integer.toBinaryString((mArray[0] & 0xFF) + 0x100).substring(1); //int 数据转换为二进制
//    	System.out.println(tString);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐