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
优点:查询速度高,占用内存小,适用判断是否存在,去重。
缺点:不能重复移动