Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建10^15个位置的数组?_Java_Arrays_Biginteger - Fatal编程技术网

Java 如何创建10^15个位置的数组?

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

我需要创建一个10^15个位置的数组,基于位置的数量,我认为有必要创建一个长数组,但是,数组的索引需要是Int,我尝试了BigInteger,但它需要将BigInteger转换为Int,这样做时,它变为负数,因此无法创建数组

代码如下:

BigInteger num = new  BigInteger("1000000000000000");
    long[] array = new long[num.intValue()];

如果我打印num.intValue(),则显示该数字为-1530494976

Java中的数组仅限于
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字节。。。是的,我也怀疑