bitset java 性能_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,java

来源: https://codeday.me/bug/20190727/1555504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值