如何计算多维数组中的元素数量?

时间:2017-01-15 09:30:49

标签: java arrays multidimensional-array

自从我学习了二维数组后,我就有了这个问题...我希望有人可以为我澄清一些事情。

这就是我所知道的 int [] x = new int [2];
这个一维数组有两个元素。

int [] [] y = new int [2] [3];
这个二维数组有六个元素吗? (2 x 3 = 6)

但是当我研究实际制作二维数组的方式时,

  1. 首先是一个名为y的引用类型变量,它可以存储内存 二维数组的地址在堆栈中生成。

  2. 然后是一个具有两个可以存储一维元素的对象 内存地址在堆中生成。

  3. 然后制作另外2个一维数组,每个数组包含3个 可以存储int类型值的元素。和...的内存地址 这两个一维数组被分配给这两个元素 早在对象内部制作的。
  4. 然后将此对象的内存地址分配给y变量 在堆栈中。
  5. 现在我遇到的问题是,在开头右边的那个对象里面只有两个元素? 所以这并不意味着二维数组有两个元素和两个一维数组各有3个元素?

    所有这些问题都让我感到困惑,因为 y.length = 2 y [0] .length = 3

    如果我错了,请纠正我,希望有人能帮助我。感谢

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。从概念上讲,这个数组看起来如图所示: enter image description here

为多维数组分配内存时,只需指定 第一个(最左边)维度的内存。您可以单独分配剩余的尺寸。例如:

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];

虽然在这种情况下单独分配第二维数组没有任何优势,但可能会有一些好处。与手动分配维度一样,您不需要为每个维度分配相同数量的元素。如前所述,由于多维数组实际上是数组数组,因此每个数组的长度都在您的控制之下。