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_Matrix - Fatal编程技术网

Java 在运行时更改二维数组的列大小

Java 在运行时更改二维数组的列大小,java,arrays,matrix,Java,Arrays,Matrix,在下面的代码中,我定义了一个(2x2)2D数组,arr。然后我声明一个包含5个元素的一维字符串数组a,并将其分配给2D数组的第一行。为什么我可以这样做,为什么它不抛出数组索引越界异常 我认为这可能是由于引用赋值,但我仍然不清楚如何允许在运行时更改数组维度 String a[] = { "1", "2", "3", "4", "5" }; String[][] arr= new String[2][2]; int x; arr[0] = a; x = arr[0].length; Syste

在下面的代码中,我定义了一个(2x2)2D数组,
arr
。然后我声明一个包含5个元素的一维字符串数组
a
,并将其分配给2D数组的第一行。为什么我可以这样做,为什么它不抛出数组索引越界异常

我认为这可能是由于引用赋值,但我仍然不清楚如何允许在运行时更改数组维度

String a[] = { "1", "2", "3", "4", "5" };

String[][] arr= new String[2][2];

int x;

arr[0] = a;
x = arr[0].length;
System.out.print("The row length is "+ x);

输出:行长度为5。

Java中没有多维数组

String[][]
描述一维数组的一维数组。每个子数组不必具有相同的长度

新字符串[2][2]只是语法上的糖

String[][] arr = new String[2][]
arr[0] = new String[2];
arr[1] = new String[2];
arr[0]=a
将引用从两元素字符串数组重新分配到另一个5元素字符串数组。2元素数组不再被引用,偶尔也会被GC'ed引用

要将元素从
a
复制到
arr
中,请使用:

System.arraycopy(a, 0, arr[0], 0, a.length);

将抛出异常。

< P> java考虑:<代码> ARR [ 0 ] = A;
作为使用
a
初始化的数组

这是一个非对称多维数组。看这张照片

创建非对称数组的另一种方法是只初始化数组的第一个维度, 并在单独的语句中定义每个数组组件的大小:

int [][] args = new int[4][];
args[0] = new int[5];
args[1] = new int[3];
这项技术揭示了Java真正得到的东西:数组的数组
托管,提供多维效果。

实际发生的是嵌套数组(与C/C++中相同):

因此,首先访问数组[],然后访问另一个数组(嵌套数组)。 如果希望获得原始性能,请避免这样做,请使用特殊的。 另外,如果矩阵中有很多空单元,请考虑使用映射代替。
对于我使用的ascii格式的东西。

@TimBiegeleisen在赋值后,行长度变为5。哇,我不知道这一点
arr[0]
是对1D数组的引用,您可以根据需要进行任何分配。在Java中,2D(或3D等)数组可以是锯齿状的,这意味着第二个维度不一定都是相同的。作为参考,您根本不必定义第二个维度的长度<代码>字符串[][]arr=新字符串[1][]
已经有效,但如果删除第一个维度的大小或只是初始化第二个维度的大小,则会引发错误dimension@XtremeBaumer所以,第二维度似乎不重要。你用这个做什么?
array[][] (actually just array[])
+---+ +---+ +---+ +---+ +---+
|   | |   | |   | |   | |   | .
| 0 | | 1 | | 2 | | 3 | | 4 | .
|   | |   | |   | |   | |   | .
+-+-+ +-+-+ +---+ +---+ +---+
  |     |
  v     v
arr[] arr[]
+---+ +---+
|   | |   |
| 0 | | 0 |
|   | |   |
+---+ +---+
|   | |   |
| 1 | | 1 |
|   | |   |
+---+ +---+
|   | |   |
| 2 | | 2 |
|   | |   |
+---+ +---+
 ...   ...