/***
* 自定义工具类
*
*/
public class BitMapUtil {
/***
* 存储数组
*/
private int[] bitArray;
private static final StringBuffer STRING_BUFFER = new StringBuffer();
public BitMapUtil(long size) {
bitArray = new int[(int)(size/32+1)];
}
/**
* 将数字存入
*/
public void set_1(int num) {
//确定index
int index = num >> 5; //除以32,确定在哪个数组区间
//确定bit index
int bitIndex = num & 31; //相当于num % 32 --求得num在第几位
//设置0
bitArray[index] |=1 << bitIndex; //将1左移n位,将对应的位置改为1 然后和数组进行或运算-- 将所在位置从0变成1,其它位置不变
}
/**
* 将数字去除
*/
public void set_0(int num) {
//确定index
int index = num >> 5; //除以32,确定在哪个数组区间
//确定bit index
int bitIndex = num & 31; //相当于num % 32 --求得num在第几位
//设置0
bitArray[index] &= ~(1 << bitIndex); //将num的第n位置为1其他默认0然后取反就得出 n位0,其他位为1,然后和数组进行&运算
}
/**
* 判断是否存在
*/
public boolean isExist(int num) {
//确定index
int index = num >> 5; //除以32,确定在哪个数组区间
//确定bit index
int bitIndex = num & 31; //相当于num % 32 --求得num在第几位
if( (bitArray[index] & ( 1 << bitIndex )) != 0 ) { //将第n位置为1 然后与bitArray[index] 进行与运算 如果大于0 则表示存在
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
* 获取存储数组
*/
public int[] getBitArr() {
return bitArray;
}
/***
* 将数字转换成32位bit
*/
public static String get32BitToString(int num) {
for(int i=0;i<32;i++) {
STRING_BUFFER.append((num & 1));
num = num >>> 1; //无符号左移
}
return STRING_BUFFER.reverse().toString();
}
}
bitmap练习
最新推荐文章于 2022-08-18 17:11:22 发布