首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 不規則二維數組初始化:數組的數組動態分配機制

     編輯:程式設計綜合問答

Java 二維數組本質是「數組的數組」,聲明時僅分配第一維引用,第二維需單獨 new。本文通過楊輝三角生成代碼,詳細解析不規則二維數組的內存結構與初始化流程。

代碼片段


int[][] arr = new int[n][];      // 分配 n 個引用,值為 null
for (int i = 0; i < n; i++) {
    arr[i] = new int[i + 1];     // 為每行動態分配不同長度
    arr[i][0] = arr[i][i] = 1;   // 兩邊為 1
    for (int j = 1; j < i; j++) {
        arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; // 內部值 = 上兩數之和
    }
}

內存結構圖解

arr (引用變量) → [引用0] → [1]
                → [引用1] → [1, 1]
                → [引用2] → [1, 2, 1]
                → [引用3] → [1, 3, 3, 1]
                ...
每行長度不同,內存不連續,靈活節省空間

關鍵點解析

  1. new int[n][]:在堆上創建長度為 n 的引用數組,每個元素初始化為 null
  2. arr[i] = new int[i+1]:為第 i 行單獨分配基本類型數組,長度 i+1
  3. 訪問 arr[i][j]:先取 arr[i] 引用,再取該數組下標 j
  4. 若不初始化第二維直接訪問 → NullPointerException

對比:規則二維數組


// 一次性分配連續內存
int[][] regular = new int[3][4]; // 3行4列,所有行長度固定
// 等價於
int[][] regular = new int[3][];
for (int i = 0; i < 3; i++) regular[i] = new int[4];

應用場景

  • 三角矩陣(楊輝三角、下三角矩陣)
  • 稀疏矩陣(僅存儲非零元素行)
  • 文本行長度不一(每行單詞數組)
  • 樹的層序遍歷結果(每層節點數不同)

遍歷最佳實踐


for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) { // 必須用 arr[i].length
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}

注意:不能用固定長度遍歷,每行 length 可能不同。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved