Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算多维数组中的元素数?_Java_Arrays_Multidimensional Array - Fatal编程技术网

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

Java 如何计算多维数组中的元素数?,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,自从我学习二维数组以来,我就一直有这个问题。。。我希望有人能为我澄清一些事情 以下是我所知道的 int[]x=新的int[2] 这个一维数组有两个元素 int[]y=新的int[2][3] 这个二维数组有六个元素,对吗?(2 x 3=6) 但当我研究二维数组的实际制作方式时 首先是一个名为y的引用类型变量,它可以存储内存 二维数组的地址在堆栈中生成 然后是一个具有两个元素的对象,可以存储一维数据 内存地址在堆中生成 然后再制作2个一维阵列,每个阵列由3个 可以存储int类型值的元素。以及 这两个

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

以下是我所知道的
int[]x=新的int[2]
这个一维数组有两个元素

int[]y=新的int[2][3]
这个二维数组有六个元素,对吗?(2 x 3=6)

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

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

  • 然后是一个具有两个元素的对象,可以存储一维数据 内存地址在堆中生成

  • 然后再制作2个一维阵列,每个阵列由3个 可以存储int类型值的元素。以及 这两个一维数组被分配给两个元素 这是早些时候在物体内部制作的
  • 然后将该对象的内存地址分配给 在堆栈中
  • 现在我的问题是,在一开始的时候,只有两个元素在这个物体内部形成,对吗这不意味着二维数组有两个元素。两个一维数组各有3个元素

    所有这些问题都困扰着我,因为y.length=2y[0]。length=3


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

    是的,你完全正确。Java本身没有二维数组。它所拥有的只是包含数组的数组,以及创建它们的语法糖(
    newint[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[][]
    并想知道它包含多少个整数,您需要在外部数组中循环并对内部数组的长度求和。除非您保证所有内部数组都具有相同的长度。在这种情况下,您可以将外部数组的长度乘以任何内部数组的长度。

    您可以用它展平多维数组,然后调用它


    它甚至会压平嵌套的列表、集合、映射和队列。

    在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];
    
    虽然在这种情况下单独分配第二维度数组没有好处,但可能有一些好处。与手动分配维度一样,不需要为每个维度分配相同数量的元素。如前所述,由于多维数组实际上是数组的数组,因此每个数组的长度由您控制