java – 检查BitSet中的所有位是否都设置为true

我在我的应用程序中使用BitSet,并希望检查一个方法,如果BitSet中的所有使用位都设置为true.现在,我知道方法isEmpty()检查是否所有位都设置为false,但我似乎无法找到正面情况.我知道我可以做像someBitSet.cardinality()== someBitSet.size()这样的事情,但这看起来很笨拙.我错过了什么,或者是否有明确的理由说明为什么没有实施这样的方法,但情况恰恰相反?

解决方法:

没有像“BitSet中的所有位”那样的东西,因为在任何时候你都可以设置比目前为止设置的最大位更大的位.假设您希望在BitSet中保留最多10个值.所以你设置10位,并想检查是否所有这些都是真的.但是BitSet不知道你只有10位.怎么样你有更多?下次你可以调用bitSet.set(10000)它会工作(BitSet会自动调整大小).

请注意,bitSet.size()在一般情况下不是很有用:它是关于消耗的内存.当前实现始终是64的倍数,因此如果您只有10个不同的状态,someBitSet.cardinality()== someBitSet.size()将始终返回false.即使您使用新的BitSet(10)创建了BitSet.构造函数参数只是一个所需的初始容量(如在ArrayList中).它仅用作性能提示.

从性能的角度来看,最佳解决方案是检查nextClearBit(0)> = myLength,其中myLength是您要在BitSet中存储的最大值数(您应该自己保留它).如果结果为假,这可能比cardinality()更快.

上一篇:有关bitset的用法 (转载)


下一篇:条件 题解(bitset优化floyd)