[英]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?
为什么它应该返回6
? 让我们来看看:
foo.get(15,21)
返回等于4
单词。 用二进制表示只有100
。
让我们阅读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.