Bit-map java实现

private static int BITSPERWORD = 32;
private static int SHIFT = 5;
private static int MASK = 0x1F;
private static int N = 99999999;

static int[] a = new int[1 + N / BITSPERWORD];


static void set(int i) {

a[i >> SHIFT] |= (1 << (i & MASK));
}


static int get(int i) {

return (a[i >> SHIFT] & (1 << (i & MASK)))>>i;
}


static void init(int i){

a[i>>SHIFT] &= ~(1<<(i & MASK));
    }

public static void main(String[] args) {
// TODO Auto-generated method stub

       for(int i=0;i<N;i++){
      init(i);
       }
       set(0);
       set(1);
       set(2);

     System.out.println( get(0));
      System.out.println(  get(1));
       System.out.println( get(2));

}

a[i>>SHIFT]相当于i/32 

1 << (i & MASK)相当于对i%32

两个值&操作就是把指定位数置1

bit-map 说明

           输入4
          00000000000000000000000000010000 
          输入2
          00000000000000000000000000010100 
          输入3
          00000000000000000000000000011100 
          输入1 
          00000000000000000000000000011110 

就是相对的位置1

优点:查询速度高,占用内存小,适用判断是否存在,去重。

缺点:不能重复移动



       

你可能感兴趣的:(Bit-map java实现)