我用Java编写代码来查找JVM可以支持的最大BigIntegers数组。
首先添加创建BigInteger []并使用更大的尺寸重新声明它。一旦大小等于Integer.MAX_VALUE,它就会开始创建BigInteger [Integer.MAX_VALUE] []并开始增加第二个维度。抛出OutOfMemory Exception后,它会停止,并返回成功初始化的最后一个数组。
不幸的是,基于计算机的RAM,它可能是BigInteger [],BigInteger [] [],一直到BigInteger [] [] [] [] []。我如何将其分配给私人对象?阵列?在我的课上,我可以稍后再提及它?
例如:
BigInteger[] x;
x = new BigInteger[][] //error, dims dont match.
答案 0 :(得分:2)
因为您要求无限制,我建议您使用LinkedList<BigInteger[]>
。或者,您可以使用LinkedList<ArrayList<BigInteger>>
并一直使用List
。
因为它是一个没有数组支持的经典双向链表,所以对它可以包含的元素数量没有Integer.MAX_VALUE
限制。它只受可用内存的限制。这样可以有效地处理两个维度。
在数组大小(或BigInteger[Integer.MAX_VALUE]
)中点击ArrayList
后,您将其添加到LinkedList
并继续。
唯一需要注意的是,size()
一旦超过Integer.MAX_VALUE
元素就无法运行,只有遍历整个列表才会告诉您。如果您希望扩展LinkedList
/创建自己的代理类并将自己的计数保持为long
编辑添加:我仍然可能完全误解了您的问题或您想要实现的目标。如果您试图找出JVM将支持的数组维数...它是JVM spec section 4.3.2
中定义的255如果你想弄清楚你可以在内存中创建/保留多少参考值,那么BigInteger
确实没有输入图片;从数组本身的角度来看,Object[10]
与BigInteger[10]
的大小完全相同;它是一个可以容纳10个参考值的数组。参考值是固定大小,就像C中的指针一样;你可以简单地创建一个LinkedList<Object>
并开始填充null
- 当你的内存不足时,你可以创建多少。当然,列表中的每个节点都有开销。在这种情况下,我原来的答案可能会更好。
如果你想弄清楚你可以创建多少BigInteger
个实例......那么只需创建一个LinkedList<BigInterger>
并拥有它。
答案 1 :(得分:0)
我同意这个问题需要澄清,但是为了回答你的问题,Java中的所有对象都继承自Object
类,因此Object
类型的变量可以引用任何内容。
Object obj = new BigInteger[1];
Object obj = new BigInteger[1][1];
Object obj = new BigInteger[1][1][1];
.
.
.