我在我的应用程序中使用了BitSet
,如果BitSet
中的所有已用位都设置为true
,我想检查方法。现在,我知道方法isEmpty()
检查所有位是否都设置为false
,但我似乎无法找到正面情况。我知道我可以做someBitSet.cardinality() == someBitSet.size()
这样的事情,但这看起来很笨拙。我是否遗漏了某些内容,或者是否有明确的理由说明为什么没有实施这样的方法,但情况恰恰相反?
答案 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
myLength
,BitSet
是您要在cardinality()
中存储的最大值数(您应该自己保留) 。如果结果为false
,这可能比Edit
工作得快。