1

在Java中,什么是更快和更少的内存:int[n]或者boolean[n]也许Bitset(n)

该问题适用于小(n最多1000)、中(n介于1000和之间100000)和大(n大于100000)大小的数组。谢谢你。

我想实现标志(1/0)存储。

4

5 回答 5

2

在大多数 JVM 上;数组或对象有 12-16 字节的开销。一个int使用 4 个字节,一个boolean使用一个字节(它不是必须的,但它与 OpenJDK/HotSpot 一起使用)BitSet 使用两个对象和更多内存用于小型集合,但每个只有一个位。因此,对于小型集合,anint[]可以小于 a BitSet,但随着大小的增长,BitSet 将是最小的。

如果数据结构小于你的缓存,那么最快的就是那么int[]这是因为在闯入或一点点时存在非​​平凡的开销。boolean[]BitSetintbyte

但是,一旦您的缓存大小变得重要,与使用较慢缓存或主内存的开销相比,BitSet 的开销可能会逐渐减弱。

简而言之:如果有疑问,请使用 BitSet,因为这更清楚您的意图并且可能更快。

于 2012-09-26T07:59:18.180 回答
1

实际上,它依赖于JVM。例如 Sun JVM 将boolean类型转换为int. 这意味着即使是布尔变量也使用 32 位。但是 jvm 优化布尔数组,并为每个布尔数组单元保留 8 位。

于 2012-09-26T07:53:09.497 回答
0

Java 存储booleanint内部。所以int[]boolean[]完全一样。

BitSet使用更少的内存。更快与否取决于您的使用模式。

于 2012-09-26T07:46:20.083 回答
0

内存使用的降序

int[n] > Bitset(n) > boolean[n] 

但是,在访问索引时,应该没有任何区别。

于 2012-09-26T07:46:44.757 回答
0

考虑用枚举替换位标志。然后你可以使用例如 EnumSet 而不是 Bitset。

于 2012-09-26T08:05:38.490 回答