我遇到了很多关于bitset的编码网站 . 但我无法理解它是存储位还是整数 .
BitSet创建一个由布尔值表示的位数组 .
import java.util.*;
public class GFG
{
public static void main(String[] args)
{
BitSet bs1 = new BitSet();
BitSet bs2 = new BitSet(6);
bs1.set(0);
bs1.set(1);
bs1.set(2);
bs1.set(4);
bs2.set(4);
bs2.set(6);
bs2.set(5);
bs2.set(1);
bs2.set(2);
bs2.set(3);
System.out.println("bs1 : " + bs1);
System.out.println("bs2 : " + bs2);
}
}
Output:
bs1 : {0, 1, 2, 4}
bs2 : {1, 2, 3, 4, 5, 6}
BitSet存储位或整数?
它如何将其存储在内存中?
任何操作完成后值如何变化?
2 回答
通常
BitSet
将使用long[]
实现 . 每个long
存储64个连续的可能位位置 . 数组需要的大小等于最高设置位索引减1(允许索引0)除以64(向下舍入) . 设置位表示为二进制1和数组中存在的位,但未设置为二进制0 .因此,您的示例的内部表示将类似于:
(第8-63位从常量中删除 - 如果需要,添加所有零 . )
BitSet使用
long
的数组存储位:操作这意味着您使用按位运算和移位来操纵那些long的位
关于6位(索引0-5)的最新情况:
这意味着您获取当前位掩码的所有位和所需偏移量的新设置位以计算新的位掩码 .
Source Code