如何创建10 ^ 15个阵列的数组?

时间:2014-11-24 13:32:28

标签: java arrays biginteger

我需要创建一个10 ^ 15个阵列的数组,根据位置的数量,我认为有必要创建一个长数组,但是,数组的索引需要是Int,我试过BigInteger但它需要将BigInteger转换为Int,当这样做时,它变为负数,因此无法创建数组。

以下是代码:

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

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

2 个答案:

答案 0 :(得分:3)

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;

但是:你知道这将使用多少内存?我怀疑你的机器有那么多记忆......

答案 1 :(得分:1)

Java库存数据的大小限制为最大Integer.MAX_VALUE。有第三方库试图克服这种限制(例如 JLargeArrays),但是......你应该仔细检查,如果你真的想要那么多的领域。也许你的算法设计得很糟糕。但是,我当然不能从你的帖子中说出来。