繁体   English   中英

Java BitSet的奇怪行为

[英]Java BitSet strange behavior

根据Javadoc ,以下代码应打印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());
    }
}

谁能解释a)为什么我会看到此行为,以及b)我如何修改代码以对其进行修复,以使提取的Bitset的长度为6而不是3?

javadoc

返回此BitSet的“逻辑大小”:BitSet中最高设置位的索引加1。

长度仅计算设置的位。

这些位是[0, 0, 1, 0, 0, 0, 0] ,在第三位之后为假,因此返回的长度。

您无需做任何事情:您的bitSet很好,如果您使用size方法,这将很明显。

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

  1. foo.get(15,21)返回等于4单词。 用二进制表示只有100

  2. 让我们阅读BitSet类的length()方法的javadoc

返回此BitSet的“逻辑大小”:BitSet中最高设置位的索引加1。 如果BitSet不包含任何设置位,则返回零。

好的,我们现在可以检查它是否为100 :最高设置位为2 (从0计数),加1为3 一切都正确。

用于BitSet#length()的 Javadoc表示返回此BitSet的“逻辑大小”:BitSet 中最高置位的索引加一个 如果BitSet不包含任何设置位,则返回零。

在您的情况下, foo.get(15,21)给出一个BitSet[0, 0, 1, 0, 0, 0, 0] foo.get(15,21) [0, 0, 1, 0, 0, 0, 0] 因此,结果为2+1=3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM