Java:声明多维数组而不指定数组的大小(例如newint[10][])

Java:声明多维数组而不指定数组的大小(例如newint[10][]),java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我一直在想这里到底发生了什么。我只是想弄清楚我在下面评论的这两行代码在做什么。我发现这个程序没有声明数组的完整维度(而不是new int[10][5];它只是决定不声明它,说“new int[10][];”就像第二个数组长度无关紧要(将其更改为1或100不会影响输出) int[]]tri=new int[10][];//缺少第二个数组的大小是很奇怪的 对于(int r=0;r,第一行生成一个int数组数组。为int数组创建了10个插槽 第三行创建一个新的int数组,并将其放入您最初创建的一个插槽

我一直在想这里到底发生了什么。我只是想弄清楚我在下面评论的这两行代码在做什么。我发现这个程序没有声明数组的完整维度(而不是new int[10][5];它只是决定不声明它,说“new int[10][];”就像第二个数组长度无关紧要(将其更改为1或100不会影响输出)

int[]]tri=new int[10][];//缺少第二个数组的大小是很奇怪的

对于(int r=0;r,第一行生成一个int数组数组。为int数组创建了10个插槽

第三行创建一个新的int数组,并将其放入您最初创建的一个插槽中。新的int数组中有r+1个int空格

因此,位置0处的int数组将有1个int槽。位置1处的int数组将有2个int槽。整体形状为:


变量名tri(看起来像一个三角形)暗示了这一点。

它只是声明了一个由10个数组组成的数组。每个“子”数组的长度都可能不同。

它并不缺少,基本上没有设置具体的数量,因为它可以有许多字段,所以不需要

第二行呢

tri[r] = new int[r+1];

正在将所有字段设置为非空

all
new int[10][
正在声明的是一个大小为10的数组,包含
null
数组


for
循环中,将
null
数组实例化为不断增加的数组大小。

如果将多维数组视为数组数组,则更有意义:

int [][] tri = new int[10][]; // This is an array of 10 arrays

tri[r] = new int[r+1]; // This is setting the r'th array to
                       // a new array of r+1 ints

最好在Java中使用多维集合


import java.util.*; 

class MultidimensionalArrayList { 

    /*function for creating and returning 2D ArrayList*/
    static List create2DArrayList() 
    { 
        /*Declaring 2D ArrayList*/
        ArrayList<ArrayList<Integer> > x 
            = new ArrayList<ArrayList<Integer> >(); 

        /*one space allocated for 0th row*/
        x.add(new ArrayList<Integer>()); 

        /*Adding 3 to 0th row created above x(0, 0)*/
        x.get(0).add(0, 3); 

        /*Creating 1st row and adding values 
    (another way for adding values in 2D collections)*/
        x.add(new ArrayList<Integer>(Arrays.asList(3, 4, 6))); 

        /*Add 366 to 1st row 0th column x(1, 0)*/
        x.get(1).add(0, 366); 

        /*Add 576 to 1st row 4th column x(1, 4)*/
        x.get(1).add(4, 576); 

        /*Adding values to 2nd row*/
        x.add(2, new ArrayList<>(Arrays.asList(3, 84))); 

        /*Adding values to 3rd row*/
        x.add(new ArrayList<Integer>(Arrays.asList(83, 6684, 776))); 

        /*Adding values to 4th row*/
        x.add(new ArrayList<>(Arrays.asList(8))); 

        return x; 
    } 

    public static void main(String args[]) 
    { 
        System.out.println("2D ArrayList :"); 

        /*Printing 2D ArrayList*/
        System.out.println(create2DArrayList()); 
    } 
} 


语法:

ArrayList x=new ArrayList();

下面是Java中多维集合的一个应用程序


import java.util.*; 

class MultidimensionalArrayList { 

    /*function for creating and returning 2D ArrayList*/
    static List create2DArrayList() 
    { 
        /*Declaring 2D ArrayList*/
        ArrayList<ArrayList<Integer> > x 
            = new ArrayList<ArrayList<Integer> >(); 

        /*one space allocated for 0th row*/
        x.add(new ArrayList<Integer>()); 

        /*Adding 3 to 0th row created above x(0, 0)*/
        x.get(0).add(0, 3); 

        /*Creating 1st row and adding values 
    (another way for adding values in 2D collections)*/
        x.add(new ArrayList<Integer>(Arrays.asList(3, 4, 6))); 

        /*Add 366 to 1st row 0th column x(1, 0)*/
        x.get(1).add(0, 366); 

        /*Add 576 to 1st row 4th column x(1, 4)*/
        x.get(1).add(4, 576); 

        /*Adding values to 2nd row*/
        x.add(2, new ArrayList<>(Arrays.asList(3, 84))); 

        /*Adding values to 3rd row*/
        x.add(new ArrayList<Integer>(Arrays.asList(83, 6684, 776))); 

        /*Adding values to 4th row*/
        x.add(new ArrayList<>(Arrays.asList(8))); 

        return x; 
    } 

    public static void main(String args[]) 
    { 
        System.out.println("2D ArrayList :"); 

        /*Printing 2D ArrayList*/
        System.out.println(create2DArrayList()); 
    } 
} 



导入java.util.*;
类多维数组列表{
/*用于创建和返回2D ArrayList的函数*/
静态列表Create2ArrayList()
{ 
/*声明2D ArrayList*/
阵列列表x
=新的ArrayList();
/*为第0行分配了一个空间*/
x、 添加(新的ArrayList());
/*将3添加到x(0,0)上方创建的第0行*/
x、 获取(0)。添加(0,3);
/*创建第一行并添加值
(在二维集合中添加值的另一种方法)*/
x、 添加(新的ArrayList(Arrays.asList(3,4,6));
/*将366添加到第1行第0列x(1,0)*/
x、 获取(1),添加(0366);
/*将576添加到第1行第4列x(1,4)*/
x、 获取(1),添加(4576);
/*将值添加到第二行*/
x、 增加(2,新的ArrayList(Arrays.asList(3,84));
/*将值添加到第三行*/
x、 添加(新的ArrayList(Arrays.asList(836684776));
/*将值添加到第四行*/
x、 添加(新的ArrayList(Arrays.asList(8)));
返回x;
} 
公共静态void main(字符串参数[])
{ 
System.out.println(“2D数组列表:”);
/*打印二维阵列列表*/
System.out.println(create2DArrayList());
} 
} 

[很抱歉,我的上一条评论不完整,我无法删除它],因此似乎必须始终声明第一个数组长度,但在此之后,可以当场创建数组长度的长度?(例如,new int[10][];可以,因为它已声明了第一个长度)。此外,行'tri[r]=new int[r+1];'似乎创建了数组的第二部分,但是否可以使此数组大于第一部分(当我创建异常时)?您总共有11个数组。第一个数组是其他10个数组的数组。
new int[10][
说“为我创建一个可以容纳
int[]
对象的数组,并为它们创建10个插槽。”代码片段的第三行是“使用
r+1
插槽创建一个int数组,并将新数组放入插槽
r
中已有的数组中”。您可以将11个数组中的任意一个设置为任意大小。所有11个大小都是独立的。

import java.util.*; 

class MultidimensionalArrayList { 

    /*function for creating and returning 2D ArrayList*/
    static List create2DArrayList() 
    { 
        /*Declaring 2D ArrayList*/
        ArrayList<ArrayList<Integer> > x 
            = new ArrayList<ArrayList<Integer> >(); 

        /*one space allocated for 0th row*/
        x.add(new ArrayList<Integer>()); 

        /*Adding 3 to 0th row created above x(0, 0)*/
        x.get(0).add(0, 3); 

        /*Creating 1st row and adding values 
    (another way for adding values in 2D collections)*/
        x.add(new ArrayList<Integer>(Arrays.asList(3, 4, 6))); 

        /*Add 366 to 1st row 0th column x(1, 0)*/
        x.get(1).add(0, 366); 

        /*Add 576 to 1st row 4th column x(1, 4)*/
        x.get(1).add(4, 576); 

        /*Adding values to 2nd row*/
        x.add(2, new ArrayList<>(Arrays.asList(3, 84))); 

        /*Adding values to 3rd row*/
        x.add(new ArrayList<Integer>(Arrays.asList(83, 6684, 776))); 

        /*Adding values to 4th row*/
        x.add(new ArrayList<>(Arrays.asList(8))); 

        return x; 
    } 

    public static void main(String args[]) 
    { 
        System.out.println("2D ArrayList :"); 

        /*Printing 2D ArrayList*/
        System.out.println(create2DArrayList()); 
    } 
}