long类型有64位,用每一位表示是否有数存在
public class BitMap{
public long[] bits;
public BitMap(int max){
bits = new long[(max + 64) >> 6]; //右移6为相当于除以64, 数组的长度为max/64 + 1
}
//num/64可以定位到是哪一个整数,如67/64,使用第1个整数表示
//num%64 == num & 63 与运算快的多。取模可以定位到该数在64位的哪一个位置。67%64 = 3,使用第1个整数的第三位表示
//把1L左移3位,与第一个整数做或运算,就是把第一个整数的第三位置1
public void add(int num){
bits[nums >> 6] |= (1L << (num & 63));
}
//删除
//把1L左移3位,取反,11110111,与第一个整数做与运算,就是把第一个整数的第三位置0
public void delete(int num){
bits[num >> 6] &= ~(1L << (num & 63));
}
//判断是否存在,67/64 == 1,第一个整数 & (1左移3位)`在这里插入代码片`
public boolean contains(int num){
return (bits[num >> 6] & (1L << (num & 63))) != 0;
}
}
版权声明:本文为qq_29855391原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。