我遇到了许多有关位集的编码站点。但是我不明白它是存储位还是整数。
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存储位还是整数?
它如何将其存储在内存中?
完成任何操作后,值如何变化?
最佳答案
通常,BitSet
将使用long[]
实现。每个long
存储64个连续的可能位位置。该数组的大小等于最高设置位索引减去1(以允许索引0)除以64(四舍五入)。设置位用二进制1表示,数组中存在但不设置为二进制0的位。
因此,示例的内部表示将类似于:
bs1 = new long[] { 0b00010111L }; // 23
bs2 = new long[] { 0b01111110L }; // 126
// bit indexes: 76543210
(第8-63位从常量中删除了-如果需要,可以将所有的零加起来。)