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

时间:2016-03-30 12:18:49

标签: java bitset

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

1 个答案:

答案 0 :(得分:7)

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

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

从性能的角度来看,最佳解决方案是检查nextClearBit(0) >= myLength myLengthBitSet是您要在cardinality()中存储的最大值数(您应该自己保留) 。如果结果为false,这可能比Edit工作得快。