1. 位图
一个int是4字节 32位,一个long类型是8字节 64位,我们可以使用1个long每一位表示一个数字 可以存储0~63 64个数字,开辟一个long类型数组就可以存储多个数字
public static class BitMap {
private long[] bits;
public BitMap(int max) { //最大范围 用于开辟数组空间
bits = new long[(max + 64) >> 6]; // 相当(x+64) / 64
}
public void add(int num) {
//num & 63 相对应 num % 64 只适用于2的阶乘
bits[num >> 6] |= (1L << (num & 63));
}
public void delete(int num) {
//1L << (num & 63) 的结果假设为 1000000 取反后则为 01111111
bits[num >> 6] &= ~(1L << (num & 63));
}
public boolean contains(int num) {
return (bits[num >> 6] & (1L << (num & 63))) != 0;
}
}