如何通过 BigIntegers 索引 BigIntegers 数组

BLP*_*P92 5 java arrays indexing biginteger

我正在尝试构建一个 BigIntegers 数组,但似乎该数组需要由整数本身进行索引(如果是真的,这对我来说似乎非常愚蠢,但我希望我只是误解了某些东西)。我正在尝试的基本上是以下内容:

BigInteger totalChoiceFunctions = BigInteger.valueOf(50031545098999704);
BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions][36];
Run Code Online (Sandbox Code Playgroud)

但这会导致错误“类型不匹配:无法从 BigInteger 转换为 int”。为了解决这个问题,我尝试了:

BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions.intValue()][36];
Run Code Online (Sandbox Code Playgroud)

但这似乎没有帮助。当我编译并运行时,出现运行时错误:

exception in thread 'main' java.lang.NegativeArraySizeException
Run Code Online (Sandbox Code Playgroud)

困惑的是,我查看了 BigInteger 的 intValue() 方法的 oracle 文档,发现“如果这个 BigInteger 太大而无法放入 int 中,则仅返回低位 32 位。请注意,此转换可能会丢失以下信息: BigInteger 值的总体大小并返回具有相反符号的结果”。我怀疑这就是正在发生的事情,考虑到 50031545098999704 对于 int 来说肯定太大了(以及为什么我转向 BigIntegers 数组,因为我希望我的数组由从 1 到 50031545098999704 的数字索引)。

如果我的理解是正确的,那么:

BigInteger[][] chioceFunctions = new BigInteger[totalChoiceFunctions][36];
Run Code Online (Sandbox Code Playgroud)

创建一个存储BigIntegers 但仍按整数索引的数组。如何创建一个既存储 BigIntegers 又由 BigIntegers 索引的数组?是否可以?请注意,如果我使用长整型而不是整数进行索引,我使用它的代码在这种情况下可能能够工作,但我希望它能够缩放到我将被迫按 BigIntegers 进行索引的大小。我错过了一些明显的东西吗?

k5_*_*k5_ 5

java 中的数组并不稀疏,因此您的数组需要大约 200 000 TB(不包括引用的数组/BigIntegers)。所以不,目前不可能。有一些计划支持 long 作为数组中的索引,可能是 java 10(当然不是 java9)。

我猜你实际上想要一个稀疏数据结构;Map<BigInteger,BigInteger> 或当您有嵌套数组 Map<Tuple<BigInteger,Integer>, BigInteger> 应该适合您。