为什么不用更大的确定性类型实现BitSet?

Kir*_*rby 0 java bits bitsets primitive-types bitset

这里的Java引用表明布尔类型虽然用"位"信息表示,但没有精确定义的大小.相比之下,其他类型似乎表明大小是定义的.例如,int是32位,故事结束.

当我们查看BitSet的规范时,我们可以看到它由布尔值组成.通过上面的参考,这似乎表明BitSet的"大小" 是未定义的 - 毕竟它由布尔值组成.果然,文档指定:

请注意,大小与位集的实现有关,因此它可能随实现而改变.

所以我的问题是,为什么不使用精确定义的另一种数据类型实现BitSet呢?例如,如果我们使用一个字节,我们可以保证8位的大小,我们不会觉得大小可能不是我们认为的大小.确实,大小必须能够被8整除,但至少它看起来更具有尺寸确定性.

如果我们的系统绝对不能超过某个内存容量,那么在大小方面实现精确的BitSet实现似乎很有用.

ste*_*vls 5

我认为你在概念上受到方法签名使用布尔值这一事实的困扰.

考虑单个位的最简单方法是关闭/打开,因此布尔值true/false是一种模拟它的便捷方式.完全另一件事是BitSet内部存储,如果您查看源代码,则使用long数组并使用位掩码来旋转各个位.

因此,它的大小与BitSet使用的位数非常接近.