JAVA中BitSet就是“位图”数据结构,根据“位图”的语义,数据的存在性可以使用bit位上的1或0来表示;一个bit具有2个值:0和1,正好可以用来表示false和true
通俗地讲,这个类中维护了一个long型(8字节)的数组,一个long占8个字节,也就是64位。
BitSet bitSet = new BitSet();
bitSet.set(0, 2, true);
上面的代码的含义是,第[0,2)位会被设置成1,也就是说这个类会自动地生成一个long型的数(words[0] = 3),这个数换成二进制的形式是 1 1
如果bitSet.set(3, 5, true); , 第[3,5)位会被设置成1, 此时words[0] = 24, 换成二进制的形式为 1 1 0 0 0
常用的方法有
int nextSetBit(int startIndex) // 返回第一个设置为 true 的位的索引,在指定的起始索引或之后的索引上
int nextClearBit(int startIndex) // 返回第一个设置为 false 的位的索引 , 在指定的起始索引或之后的索引上
void set(int index, boolean v) // 将指定索引处的位设置为指定的值
将指定索引处的位设置为 true
在LeetCode 56. 合并区间 中有所应用