为什么Java的BitSet在内部存储长数组,但将int用作set方法?

问题描述 投票:-1回答:2

根据BitSet实现,它在内部使用long数组:

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

但是对于set方法,它使用int:

public void set(int bitIndex) {...}

因此,基本上,我们可以存储2,147,483,642 * 64 = 137,438,953,088 bits,但是我们只能访问前2,147,483,648位。

此逻辑背后的意义是什么?

java bit long-integer bitset
2个回答
1
投票

通常,您使用位集来索引其他内容。假设您使用此位集索引到数组中。在最大BitSet索引下,该数组将包含2,147,483,648个元素,并且它将至少使用2GB的RAM(假设每个元素至少需要1个字节的存储空间),这将使Java崩溃。


0
投票

每个64位块被打包成long,而不是每个bit索引长一个,因此,在调用set(int index)时,long []字数组的长度将最多使用带有int索引的268,435,456字节

© www.soinside.com 2019 - 2024. All rights reserved.