gpt4 book ai didi

java - 为什么java中BitSet的内部数据存储为long[]而不是java中的int[]?

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:01 24 4
gpt4 key购买 nike

在java中,BitSet的内部数据存储为 long[] 而不是 int[],我想知道为什么?这是jdk中的代码:

 /**
* The internal field corresponding to the serialField "bits".
*/
private long[] words;

如果一切都与性能有关,我想知道为什么 long[] 存储会获得更好的性能。

最佳答案

查询或操作单个位时,没有显着差异。您必须计算单词索引并读取该单词,并且在更新的情况下,操作该单词的一位并将其写回。 int[]long[] 都是一样的。

有人可能会争辩说使用 long 而不是 int 可能会增加必须为单个位操作传输的内存量32 位内存总线,但由于 Java 是在上个世纪九十年代设计的,因此设计人员认为这不再是问题。

另一方面,当同时处理多个 位时,你会大获全胜。当您执行类似 and 的操作时, orxor在整个 BitSet 上,当使用 long 数组时,您可以对整个单词执行操作,一次读取 64 位。

同样,当searching for the next set bit ,如果该位不在起始位置的字内,则首先针对零测试后续字,这是一个固有操作,即使对于大多数 32 位 CPU 也是如此,因此您可以一次跳过 64 个零位,而第一个非零位word肯定会包含下一个set bit,所以整个迭代只需要一个bit提取操作。

批量操作的这些好处将超过任何与单位相关的缺点,如果有的话。如前所述,当今大多数 CPU 都能够直接对 64 位字执行所有操作。

关于java - 为什么java中BitSet的内部数据存储为long[]而不是java中的int[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32110554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com