根本思维:
不同于应用int(long或double或...)类型来存储某个元素,BitMap采纳一个bit位来标记某个元素(bit位的value为1示意该元素存在,此时该bit位的index即为该元素的值。)
算法
一个字节byte占用8个bit位,每个bit位的值为0或1,0代表该bit位没有元素存储,1代表该bit位的元素存在(元素的值为该bit位的index)。
问题:
问题:给40亿个不反复的unsigned int的整数,没排序。再给一个数,疾速判断这个数是否存在40亿个整数中?内存限度2G。
剖析过程:
40亿个无符号整数须要占用的内存空间 = 40 * 10^8 * 4 / 2^30 ≈ 14.9G
,无奈全副加载到内存中应用传统的内存排序。
如果应用BitMap,须要占用的内存空间 = 40 * 10^8 / 8 / 2^30 ≈ 477M
,大大节俭了存储空间。
byte[]index = n >> 3;position = n & 7;// add(n)byte[index] |= 1 << position;// clear(n)byte[index] &= ~(1 << position);// contain(n)byte[index] & (1 << position) != 0