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

Java 二維數組定義與初始化完全指南:規則數組、不規則數組與多維數組技巧

     編輯:Java 綜合教學

Java 二維數組定義與初始化完全指南

二維數組本質是「數組的數組」。Java 中使用 [][] 聲明,支持聲明時靜態初始化、動態分配行列、以及不規則(鋸齒)數組創建。

基本語法

// 1. 聲明並動態分配固定行列
float[][] matrix = new float[5][5]; // 5行5列
matrix[0][0] = 1.1f;

// 2. 聲明不規則數組:先定行數,再逐行分配列數
long[][] jagged = new long[5][]; // 5行,每行列數待定
jagged[0] = new long[5]; // 第1行5列
jagged[1] = new long[3]; // 第2行3列
// ... 

// 3. 靜態初始化:聲明同時賦值(規則數組)
double[][] data = {
    {1.111, 2.222, 3.333},
    {4.444, 5.555, 6.666}
};

// 4. 靜態初始化:不規則數組
int[][] irregular = new int[][] {
    {10, 20, 30},
    {40, 50},
    {60}
};

內存結構圖解

new int[3][4] 在堆中創建:

  • 1 個主數組對象(長度 3),存儲 3 個引用
  • 3 個子數組對象(各長度 4),存儲實際 int 值
  • 主數組每個元素指向一個子數組

不規則數組 new int[3][] 僅創建主數組,子數組為 null,需逐個 new 分配。

遍歷方式

int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
// 方式一:雙重 for 循環(需處理不規則長度)
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}

// 方式二:增強 for 循環(更簡潔)
for (int[] row : arr) {
    for (int val : row) {
        System.out.print(val + " ");
    }
    System.out.println();
}

常見陷阱

  • 空指針異常:聲明 int[][] a = new int[3][]; 直接訪問 a[0][0] 拋出 NPE,因子數組未初始化。
  • 淺拷貝陷阱:int[][] copy = arr.clone(); 僅複製主數組引用,修改 copy[0][0] 會影響原數組。深拷貝需逐行 Arrays.copyOf 或手動循環複製。
  • 超大數組 OOM:new int[100000][100000] 直接導致堆內存溢出,需分塊處理或使用稀疏矩陣結構。

最佳實踐建議

  1. 優先使用 List<List<T>> 或 ArrayList<ArrayList<T>> 替代原始二維數組,獲得動態擴容、泛型安全、豐富 API。
  2. 性能極度敏感場景(如矩陣運算、圖像處理)可用一維數組 int[] flat = new int[rows * cols] 配合索引計算 flat[row * cols + col] 消除多層引用開銷。
  3. 不規則數組適用於「每行長度差異大」的稀疏數據存儲,節省記憶體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved