[英]Changing the column size of 2D array at runtime
在下面的代碼中,我定義了一個(2x2)2D數組arr
。 然后,我聲明一個包含5個元素的一維String數組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。
實際發生的是嵌套數組(與C / C ++中相同):
array[][] (actually just array[])
+---+ +---+ +---+ +---+ +---+
| | | | | | | | | | .
| 0 | | 1 | | 2 | | 3 | | 4 | .
| | | | | | | | | | .
+-+-+ +-+-+ +---+ +---+ +---+
| |
v v
arr[] arr[]
+---+ +---+
| | | |
| 0 | | 0 |
| | | |
+---+ +---+
| | | |
| 1 | | 1 |
| | | |
+---+ +---+
| | | |
| 2 | | 2 |
| | | |
+---+ +---+
... ...
因此,首先訪問array [],然后訪問另一個數組(嵌套的數組)。 如果您想要原始性能 ,請避免這樣做,請使用特殊的數學矩陣lib 。 另外,如果矩陣中有很多空單元格,請考慮改用Maps。 對於花哨的ascii東西,我使用它 。
Java中沒有多維數組。
String[][]
描述一維數組的一維數組。 每個子數組不必具有相同的長度。
新的String [2] [2]只是用於
String[][] arr = new String[2][]
arr[0] = new String[2];
arr[1] = new String[2];
arr[0] = a
將引用從兩個元素的String數組重新分配給另一個5個元素。 2元素數組不再被引用,並偶爾進行了GC處理。
要將元素從a
復制到arr
使用:
System.arraycopy(a, 0, arr[0], 0, a.length);
這將引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.