这就是我所知道的
int [] x = new int [2];
这个一维数组有两个元素。
int [] [] y = new int [2] [3];
这个二维数组有六个元素吗? (2 x 3 = 6)
但是当我研究实际制作二维数组的方式时,
首先是一个名为y的引用类型变量,它可以存储内存 二维数组的地址在堆栈中生成。
然后是一个具有两个可以存储一维元素的对象 内存地址在堆中生成。
现在我遇到的问题是,在开头右边的那个对象里面只有两个元素? 所以这并不意味着二维数组有两个元素。 和两个一维数组各有3个元素?
所有这些问题都让我感到困惑,因为 y.length = 2 和 y [0] .length = 3
如果我错了,请纠正我,希望有人能帮助我。感谢答案 0 :(得分:2)
是的,你是对的。 Java本身没有二维数组。它所有的都是包含数组的数组,以及用于创建它们的语法糖(new int[2][3]
)。
但你确实有一个包含不同长度数组的数组:
int[][] array = new int[2][];
array[0] = new int[5];
array[1] = new int[3];
System.out.println(Arrays.deepToString(array));
// prints [[0, 0, 0, 0, 0], [0, 0, 0]]
所以你得到一个int[][]
并想知道它包含多少个整数,你需要遍历外部数组并总结内部数组的长度。除非您确保所有内部数组具有相同的长度。在这种情况下,您可以将外部数组的长度乘以任何内部数组的长度。
答案 1 :(得分:0)
您可以使用此method展平多维数组,并在其上调用List#size()
。
它甚至可以压缩嵌套的列表,集合,地图和队列。
答案 2 :(得分:0)
在Java中,多维数组实际上是数组的数组。例如,名为arr的二维数组变量如下所示:
int arr[][] = new int[4][5];
这将分配一个4乘5的数组并将其分配给arr。从概念上讲,这个数组看起来如图所示:
为多维数组分配内存时,只需指定 第一个(最左边)维度的内存。您可以单独分配剩余的尺寸。例如:
int twoD[][] = new int[4][];
twoD[0] = new int[5];
twoD[1] = new int[5];
twoD[2] = new int[5];
twoD[3] = new int[5];
虽然在这种情况下单独分配第二维数组没有任何优势,但可能会有一些好处。与手动分配维度一样,您不需要为每个维度分配相同数量的元素。如前所述,由于多维数组实际上是数组数组,因此每个数组的长度都在您的控制之下。