bitmap简述
bitMap这种数据结构在解决一些大数据问题时候,是比较有用的数据结构。可以明显减少内存的使用和查找数据的速度。 利用计算机的1个bit位来表示一个数。某一个bit位的值位1 表示该bit位表示的数字是存在的
例如 1个字节可以表示 8 个数字。
代码是最好的解释
以32位系统的 java 代码
package datastructself;
public class BitMap {
// 32位表示的最大的整数先计算整数 536870912 = 2^32 / 8
private byte[] bitArray = new byte[536870912];
private int getIndex(int number) {
int index;
if (0 == number % 8) {
index = number / 8 - 1;
} else {
index = number / 8;
}
return index;
}
private int getOffset(int number) {
int offset;
if (0 == number % 8) {
offset = 7;
} else {
offset = number % 8 - 1;
}
return offset;
}
public void bitSet(int number) {
int index = this.getIndex(number);
int offset = this.getOffset(number);
bitArray[index] = (byte) (bitArray[index] | 1 << offset);
}
public void bitClear(int number) {
int index = this.getIndex(number);
int offset = this.getOffset(number);
bitArray[index] = (byte) (bitArray[index] & ~(1 << offset));
}
public boolean get(int number) {
int index = this.getIndex(number);
int offset = this.getOffset(number);
return (byte) (bitArray[index] & (1 << offset)) != 0;
}
}
测试代码
public class Driver {
public static void main(String[] args) {
BitMap bitMap = new BitMap();
Integer a = 12345678;
Integer b = 4567801;
Integer c = 136;
bitMap.bitSet(a);
bitMap.bitSet(b);
bitMap.bitSet(c);
System.out.println(bitMap.get(125));
System.out.println(bitMap.get(a));
}
}