繁体   English   中英

Java定义多维数组

[英]Java defining multidimensional array

我正在这样定义一个数组: int [][] intervals = new int[10][10]; 但是我的数组必须具有不同的尺寸,具体取决于谁调用定义此数组的函数。

我想尝试做这样的事情: int [][] intervals = new int[][]; 但它说“变量必须提供维表达式或数组初始化器”

我也尝试过int [][] intervals = null ,但是之后,当我尝试执行intervals[3][4] = 10它给出了异常;

那我该怎么做呢?

在Java中创建多维数组时,必须至少指定最外层数组的维数。 在您的情况下,如果希望所有阵列的大小都不同,则仍然需要指定您需要多少个阵列。 例如,如果您需要六个数组,您可以说

int [][] intervals = new int[6][];

然后,您可以像这样填写它们:

intervals[0] = new int[137];
intervals[1] = new int[42];
/* ... */

如果您事先不知道需要多少个数组,则可能需要考虑使用ArrayList<int[]>显式添加新数组。 例如:

ArrayList<int[]> intervals = new ArrayList<int[]>();
intervals.add(new int[137]);
intervals.add(new int[42]);
/* ... */

希望这可以帮助!

尝试将多维数组视为数组数组

这与JVM内部的情况并不完全相同,但这是解决此类问题的最佳心理模型。

所以,如果你有

int [][] intervals = null;

那么您的外部数组为null,以后可以使用初始化

int size = 10;
intervals = new int[size][];

这将创建一个int[]数组,但在这种情况下,10个内部数组中的每一个都是null。

如果希望它们的大小都相同(例如10 x 5阵列),请执行以下操作:

int size1 = 10;
int size2 = 5;
intervals = new int[size1][size2];

但是,如果您希望它们的大小不同,请执行以下操作:

int size = 10;
intervals = new int[size][];
intervals[0] = new int[5];
intervals[1] = new int[4];
// etc...

但是所有这些假设都假定您在开始填充数组之前就知道数组要多大。
如果您不知道,则想使用List -看一下ArrayList

编辑我刚刚在您的评论中看到了后一种情况就是您想要的,所以...

尝试类似:

List< List<Integer> > list = new ArrayList< List<Integer> >();


for(int i=0; i<10; i++) // You would loop over whatever input you're processing
{                       //  but I don't know what you're doing in that part of you code
                        //  so I'll just do it 10 times.

    List<Integer> innerList = new ArrayList< Integer >();

    innerList.add( 1 );
    innerList.add( 2 );
    innerList.add( 3 );

    // etc.

    list.add( innerList );
}

或者,您可以拥有:

  • List< int[] > ,这意味着对外部集合使用List,对内部集合使用数组,如果您知道内部集合将要使用多长时间。
  • List<Integer>[] ,它对外部集合使用数组,对内部集合使用列表。

这实际上取决于您的代码需要如何工作。

如果要动态分配数组中的元素,则应考虑ArrayList

ArrayList< ArrayList< int > > array = new ArrayList< ArrayList< int > >();
array.add( new ArrayList< int >() );
array.get( 0 ).add( 1 );
array.get( 0 ).add( 2 );
array.add( new ArrayList< int >() );
array.get( 1 ).add( 3 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM