将n维数组分配给对象

时间:2014-01-19 05:50:39

标签: java arrays biginteger

我用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.

2 个答案:

答案 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];
.
.
.