java - 如何通过 BigIntegers 索引 BigIntegers 数组

标签 java arrays indexing biginteger

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

BigInteger totalChoiceFunctions = BigInteger.valueOf(50031545098999704);
BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions][36];

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

BigInteger[][] choiceFunctions = new BigInteger[totalChoiceFunctions.intValue()][36];

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

exception in thread 'main' java.lang.NegativeArraySizeException

一头雾水,查看了oracle文档中BigInteger的intValue()方法,发现“如果这个BigInteger太大,不能放入一个int中,则只返回低32位,注意这个转换可以丢失有关 BigInteger 值的总体大小的信息,并返回一个符号相反的结果”。我怀疑这是怎么回事,考虑到 50031545098999704 对于 int 来说肯定太大了(以及为什么我转向 BigIntegers 数组,因为我希望我的数组由 1 到 50031545098999704 之间的数字索引)。

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

BigInteger[][] chioceFunctions = new BigInteger[totalChoiceFunctions][36];

创建一个数组,该数组存储 BigIntegers 但仍由整数索引。如何制作一个既存储又由 BigIntegers 索引的数组?是否可以?请注意,在这种情况下,如果我使用 long 而不是 int 进行索引,我正在使用它的代码可能能够工作,但我希望它扩展到我将被迫通过 BigIntegers 进行索引的大小。我是否遗漏了一些明显的东西?

最佳答案

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

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

关于java - 如何通过 BigIntegers 索引 BigIntegers 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237689/

相关文章:

Java 循环中的 boolean 条件

c++ - 如何将动态数组中的数组指向某物?

python - 切片和椭圆索引操作会产生什么结果?

java - 将 boolean 值从注册发送到登录,但 toast 不工作

java - TypeScript 映射到 Java 映射

java - 在构造函数中访问实例成员

mysql - 查询时间太长

java - Gradle 无法解析 Spring Boot HATEOAS 依赖项

arrays - Go代码为更新的 slice 报告了错误的基础数组?

sql - 索引 bool 字段