boolean []与BitSet:哪个更有效?

在内存和CPU使用率方面,更有效的方法是booleans或BitSet 数组?不使用特定的BitSet方法,仅使用get / set / clear(分别为数组的==,=,Arrays.fill)。



呼啦一阵风
浏览 729回答 3
3回答

尚方宝剑之说

从一些带有Sun JDK 1.6计算质数的基准测试中筛选(最好进行10次迭代以进行预热,给JIT编译器一个机会,并排除随机调度延迟,Core 2 Duo T5600 1.83GHz):除了非常小的大小,BitSet比boolean []更有效的存储。数组中的每个布尔值都占用一个字节。对于BitSet,runtime.freeMemory()中的数字有些混乱,但更少。boolean []的CPU效率更高,除了非常大的大小(大约相等)之外。例如,对于大小为100万的boolean [],大约要快四倍(例如6ms对27ms),而对于一亿个,它们大约是偶数。

扬帆大鱼

Boolean[] 每个布尔值使用大约4-20个字节。boolean[] 每个布尔值使用大约1个字节。BitSet 每个布尔值使用大约1位。对于您来说,内存大小可能不是问题,在这种情况下,boolean []可能更易于编写代码。

拉莫斯之舞

您的问题有些遗漏,但是如果您担心存储问题,则可以考虑使用Huffman压缩技术。例如,00000001可以按频率压缩到等于{(7)0, (1)1}。更加“随机化”的字符串00111010将需要更复杂的表示形式,例如{(2)0, (3)1, (1)0, (1)1, (1)0},并占用更多空间。根据您的位数据的结构,您可能会从中获得一些存储方面的好处BitSet。
打开App,查看更多内容
随时随地看视频慕课网APP