我遇到了许多有关位集的编码站点。但是我不明白它是存储位还是整数。

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位从常量中删除了-如果需要,可以将所有的零加起来。)

07-24 14:22