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

来源:互联网 发布:我的世界mac存档放哪 编辑:程序博客网 时间:2024/06/05 05:34
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);        }}

0 0
原创粉丝点击