下面代码简单实现了一个指定存储范围的BitSet public class BitSet { private long max; private long min; private int[] arr; public BitSet(long min, long max) { this.max = max; this.min = min; int n = (int) (((max - min) >> 5) + 1); arr = new int[n]; // 此处初始化为0在java中是不必要的,虚拟机在堆中为对象申请完空间后,会先把申请到的空间都置为0 for(int i = 0; i < n; i++) { arr[0] = 0; } } public void setBit(long num) { long distance = num - min; int arrIndex = (int)(distance >> 5); int intByteIndex = (int)(distance & 0b11111); int arrIndexValue = arr[arrIndex]; arr[arrIndex] = arrIndexValue | (0b1 << intByteIndex); } public boolean containsBit(long num) { long distance = num - min; int arrIndex = (int)(distance >> 5); int intByteIndex = (int)(distance & 0b11111); int arrIndexValue = arr[arrIndex]; int n = arrIndexValue & (0b1 << intByteIndex); return n != 0; } }
BitSet(BitMap)的java简单实现
最新推荐文章于 2024-08-22 10:37:57 发布