Java位集奇怪的行为

Java位集奇怪的行为,java,bitset,Java,Bitset,根据,应打印以下代码6。但是,它输出3,没有明显的原因 import java.util.*; public class BitSetStrangeness{ public static void main(String[] args){ BitSet foo = new BitSet(); int[] arbitrary = new int[] { 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0

根据,应打印以下代码
6
。但是,它输出
3
,没有明显的原因

import java.util.*;
public class BitSetStrangeness{
    public static void main(String[] args){
        BitSet foo = new BitSet();
        int[] arbitrary = new int[] {
    0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1
        };
        for (int i = 0; i < arbitrary.length; i++)
            if (arbitrary[i] == 1) foo.set(i);
            else foo.clear(i);
        System.out.println(foo.get(15,21).length());
    }
}
import java.util.*;
公共类位转换{
公共静态void main(字符串[]args){
BitSet foo=新的位集();
int[]任意=新int[]{
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1
};
for(int i=0;i
有人能解释a)我为什么会看到这种行为,b)我如何修改代码以修复它,从而使提取的位集长度为6而不是3吗?

来自:

返回此位集的“逻辑大小”:位集中最高集位的索引加上一

长度仅计算设置的位

位是
[0,0,1,0,0,0,0,0]
,在第三个位之后为false,因此返回长度


您无事可做:您的位集很好,如果您使用了该方法,就会很清楚。

为什么它应该返回
6
?让我们看看:

  • foo.get(15,21)
    返回单词equals
    4
    。在二进制表示中,它只是
    100

  • 让我们阅读
    length()的
    javadoc
    方法
    BitSet
    类:

  • 返回此位集的“逻辑大小”:位集中最高集位的索引加上一。如果位集不包含设置位,则返回零

    好的,我们现在可以检查它的
    100
    :设置的最高位是
    2
    (从
    0
    开始计算),加上一位将是
    3
    。一切都是正确的。

    Javadoc for,says返回此位集的“逻辑大小”:位集中最高集位的索引加上一。如果位集不包含设置位,则返回零


    在您的例子中,
    foo.get(15,21)
    给出了一个
    位集
    [0,0,1,0,0,0]
    。因此结果是
    2+1=3

    谢谢你的回答。我试图将一个位集视为一个位字符串,我希望带有fromIndex和toIndex的
    get
    函数的行为类似于子字符串函数。