簡體   English   中英

在運行時更改2D數組的列大小

[英]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。

Java認為arr[0] = a; 作為與初始化一個數組a

此非對稱多維數組。 看這張圖片。

在此處輸入圖片說明

創建非對稱數組的另一種方法是僅初始化數組的第一維,並在單獨的語句中定義每個數組組件的大小:

int [][] args = new int[4][];
args[0] = new int[5];
args[1] = new int[3];

這項技術揭示了Java的真正意義:經過適當管理的數組數組可提供多維效果。

實際發生的是嵌套數組(與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM