位图位图位图

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版权协议,转载请附上原文出处链接和本声明。