Java:固定大小的二维int数组的数组

3

能否创建一个二维整数数组的数组,例如:

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

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

为了提高性能,我希望将其存储在堆栈中,而不是像这样:

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

据我所知,这将被存储在堆中。

4
数组始终被存储在堆上 - 至少在概念上是如此。它们是引用类型。(非常聪明的JVM可能会执行逃逸分析,但您应该假设它将在堆上。) - Jon Skeet
即使是像int[] a = new int[5]这样的简单数组也会在堆上。好的,谢谢您的信息,那么ArrayList就是一个解决方案。 - Sophie Sperner
@TheZ:非常有趣,很想知道为什么[x*y]线性数组比二维数组更好。 - Sophie Sperner
@SophieSperner 你可能想要使用 new int[n][][]; - obataku
@SophieSperner 当数组是非嵌套和矩形的时候,通常会选择一维数组,因为在某些情况下它可能更有效率。但在这种情况下,你的数组是嵌套的,所以忽略他的建议。 - obataku
显示剩余7条评论
2个回答

4
创建一个3D数组。
int n = 100;
int[][][] a = new int[n][][];

这将创建100个任意维度的数组嵌套数组。
这几乎与以下方式一样(不)有效:
List<int[][]> a = new ArrayList<int[][]>(n);

5
@downvoter,您能否说明原因? - Peter Lawrey
+1作为安慰,因为你的投票被踩了(5:1回报-赢了!)。 - Ted Hopp
仅供娱乐:没有什么东西可以“几乎和X一样(不)有效率”,因为它必须同时从两个方面接近X的效率 :) - Marko Topolnik
@MarkoTopolnik 没错,两种方式的区别都无关紧要。 ;) - Peter Lawrey

3

Is it possible to create an array of 2D int arrays like:

int n = 100;
int[][] [] a = new int[][] [n];
-->这种语法是无效的,会导致编译错误。请使用冒号(:)。
int n = 100;
int[][] [] a = new int[n][] [];

但是在Java中,数组是对象,因此a是一个对象,会被存储在堆上而不是栈上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接