Java 如何创建10^15个位置的数组?
我需要创建一个10^15个位置的数组,基于位置的数量,我认为有必要创建一个长数组,但是,数组的索引需要是Int,我尝试了BigInteger,但它需要将BigInteger转换为Int,这样做时,它变为负数,因此无法创建数组 代码如下:Java 如何创建10^15个位置的数组?,java,arrays,biginteger,Java,Arrays,Biginteger,我需要创建一个10^15个位置的数组,基于位置的数量,我认为有必要创建一个长数组,但是,数组的索引需要是Int,我尝试了BigInteger,但它需要将BigInteger转换为Int,这样做时,它变为负数,因此无法创建数组 代码如下: BigInteger num = new BigInteger("1000000000000000"); long[] array = new long[num.intValue()]; 如果我打印num.intValue(),则显示该数字为-153
BigInteger num = new BigInteger("1000000000000000");
long[] array = new long[num.intValue()];
如果我打印num.intValue(),则显示该数字为-1530494976Java中的数组仅限于
Integer.MAX_VALUE
条目。
如果需要更多的元素,则需要有多个数组,每个数组存储一些部分。
它可能是这样的:
long[][] array = new long[1_000_000][1_000_000_000];
BigInteger num = your-actual-array-index-you-want-access;
int majorIndex = num.longValue() / 1_000_000;
int minorIndex = num.longValue() % 1_000_000;
array[majorIndex][minorIndex] = value;
但是:你知道这将使用多少内存吗?我怀疑您的计算机是否有那么多内存…Java中的数组仅限于
Integer.MAX\u VALUE
项。
如果需要更多的元素,则需要有多个数组,每个数组存储一些部分。
它可能是这样的:
long[][] array = new long[1_000_000][1_000_000_000];
BigInteger num = your-actual-array-index-you-want-access;
int majorIndex = num.longValue() / 1_000_000;
int minorIndex = num.longValue() % 1_000_000;
array[majorIndex][minorIndex] = value;
但是:你知道这将使用多少内存吗?我怀疑您的机器是否有那么多内存…Java的库存数组的大小限制为最大
Integer.MAX\u VALUE
。有一些第三方库试图克服这一限制(例如
),但是。。。如果你真的想要那么多字段,你应该仔细检查。也许你的算法设计得很糟糕。当然,从你的帖子中我看不出来。Java的股票数组在大小上被限制为最大值
Integer.MAX\u VALUE
。有一些第三方库试图克服这一限制(例如
),但是。。。如果你真的想要那么多字段,你应该仔细检查。也许你的算法设计得很糟糕。当然,从你的帖子上我看不出来。那是一点轮换。num已经超过了int的大小限制。您必须仅使用BigInt。如果您需要这么大的数组,我觉得您需要重新设计正在制作的任何东西。如果你能告诉我们更多你想做什么,也许我们可以建议一种不需要如此庞大数组的方法。你最好打电话给谷歌。我不确定其他人是否有那么多存储空间。另外,请记住,将数组声明为
long[]
只意味着您将在其中存储long,而不是int、string或任何其他类型/类。它不影响数组大小。long
为64位。64*10^15位是7,11 PB,或7275,96 TB。你有这么大的记忆力是绝对不可能的。你需要几年的时间才能将数组设置为0,这就是位旋转。num已经超过了int的大小限制。您必须仅使用BigInt。如果您需要这么大的数组,我觉得您需要重新设计正在制作的任何东西。如果你能告诉我们更多你想做什么,也许我们可以建议一种不需要如此庞大数组的方法。你最好打电话给谷歌。我不确定其他人是否有那么多存储空间。另外,请记住,将数组声明为long[]
只意味着您将在其中存储long,而不是int、string或任何其他类型/类。它不影响数组大小。long
为64位。64*10^15位是7,11 PB,或7275,96 TB。你有这么大的记忆力是绝对不可能的。仅将数组设置为0需要几年时间。64位长*10^15=6.4*10^16位/8/1024/1024/1024/1024=~7 PB。。。是的,我怀疑它有64位长*10^15=6.4*10^16位/8/1024/1024/1024/1024=~7 PB字节。。。是的,我也怀疑