1. 位图

一个int是4字节 32位,一个long类型是8字节 64位,我们可以使用1个long每一位表示一个数字 可以存储0~63 64个数字,开辟一个long类型数组就可以存储多个数字

09. 位图 - 图1

  1. public static class BitMap {
  2. private long[] bits;
  3. public BitMap(int max) { //最大范围 用于开辟数组空间
  4. bits = new long[(max + 64) >> 6]; // 相当(x+64) / 64
  5. }
  6. public void add(int num) {
  7. //num & 63 相对应 num % 64 只适用于2的阶乘
  8. bits[num >> 6] |= (1L << (num & 63));
  9. }
  10. public void delete(int num) {
  11. //1L << (num & 63) 的结果假设为 1000000 取反后则为 01111111
  12. bits[num >> 6] &= ~(1L << (num & 63));
  13. }
  14. public boolean contains(int num) {
  15. return (bits[num >> 6] & (1L << (num & 63))) != 0;
  16. }
  17. }