Java:2D int数组的固定大小数组[重复]

Posted

技术标签:

【中文标题】Java:2D int数组的固定大小数组[重复]【英文标题】:Java: fixed size array of 2D int array [duplicate] 【发布时间】:2012-08-12 01:58:44 【问题描述】:

是否可以创建一个二维 int 数组的数组,例如:

int n = 100;
int[][] [] a = new int[][] [n];

数组具有固定长度n,矩阵(二维数组)具有不同的非零大小(至少1 x 1)。

为了性能,我想将它存储在堆栈中,而不是:

ArrayList<int[][]> a = new ArrayList<int[][]>(n);

据我所知,它将存储在堆上。

【问题讨论】:

数组总是存储在堆中——至少在概念上是这样。它们是引用类型。 (非常聪明的 JVM 可能会执行逃逸分析,但您应该假设它将在堆上。) 如果您的数组进入集合,它们将不会存储在堆栈中。 Java可能尝试对此进行优化(link;请参阅答案底部的 Jon 的注释),但不是必须的。 建议,二维数组被高估了:使用长度*宽度的伪二维数组,使用[x+(length*y)]访问 即使是像int[] a = new int[5] 这样的简单数组也会在堆上。好的,感谢您的信息,所以ArrayList 是一个解决方案。 @TheZ:很有趣,很高兴看到[x*y]线性阵列优于二维阵列的原因.. 【参考方案1】:

是否可以创建一个二维 int 数组的数组,例如:

int n = 100;
int[][] [] a = new int[][] [n];

--> 这对语法无效,你会得到编译器错误。使用:

int n = 100;
int[][] [] a = new int[n][] [];

但是a 是一个对象,因为java 中的数组是对象,所以a 将存储在堆上而不是堆栈上。

【讨论】:

【参考方案2】:

创建 3D 数组

int n = 100;
int[][][] a = new int[n][][];

这将创建 100 个任意维度的数组。

这几乎和(低)效率一样

List<int[][]> a = new ArrayList<int[][]>(n);

【讨论】:

@downvoter 你能评论一下为什么吗? +1 作为反对票的安慰(5:1 回报——赢!)。 只是为了幽默:没有什么可以“几乎和 X 一样(低)效率”,因为它必须同时从双方接近 X 的效率 :) @MarkoTopolnik 是的,无论哪种方式,差异都无关紧要。 ;)

以上是关于Java:2D int数组的固定大小数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中创建二维数组[重复]

Java实现比较两个数值数组的大小

java集合和数组的区别,举例子

c中的2d动态int数组

在java中可逆地改组一个int数组[重复]

在Python中初始化一个固定大小的数组[重复]