布尔[] vs. BitSet:哪个更有效?

2022-08-31 13:39:12

在内存和CPU使用率方面,什么更有效率 - 一个数组或一个BitSet?不使用特定的 BitSet 方法,只使用 get/set/clear(对于数组,则分别为 ==、=、Arrays.fill)。boolean


答案 1
  • Boolean[]每个布尔值使用大约 4-20 个字节。
  • boolean[]每个布尔值使用大约 1 个字节。
  • BitSet每个布尔值使用大约 1 位。

内存大小对您来说可能不是问题,在这种情况下,布尔值[]可能更易于编码。


答案 2

从一些基准测试与Sun JDK 1.6计算素数与筛子(最好的10次迭代预热,给JIT编译器一个机会,并排除随机调度延迟,Core 2 Duo T5600 1.83GHz):

BitSet 比布尔 [] 的内存效率更高,除了非常小的尺寸。数组中的每个布尔值都带有一个字节。来自 runtime.freeMemory() 的数字对于 BitSet 来说有点混乱,但更少。

布尔值[]的CPU效率更高,除了非常大的尺寸,它们大致相等。例如,对于大小100万,布尔值[]大约快四倍(例如6ms与27ms),对于1000万和1000万,它们大约是均匀的。