如果用set存储数据,一个整数4B,40亿个就是40*10^8*4B=16G,内存肯定装不下。
判断一个数是否存在,可以用0或1来表示,1表示存在,所以可以用一个bit来代表。可以申请2^32个bit,大概是42亿多点。1代表第一个bit,2代表第二个bit,2^32代表最后一个位。新来一个数,比如2563,就找一下第2563位,如果是0,就表示不存在(并把这个值设为1),如果是1,就表示存在。这样只需要2^32个bit,相当于2^29B,约等于500MB,所以只需要申请500MB内存。因为原来的32位整数,转化为了1位的bit,所以数据空间就是原来的1/32。这就是bitmap算法。