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

Java 陣列完整攻略:宣告、初始化、多維、不規則陣列與高效遍歷

     編輯:Java 相關知識

核心概念

陣列是**固定長度**、**有序**、**同質型別**的資料結構。Java 中陣列是物件,存放於堆記憶體,透過參考存取。

一、宣告與初始化

1.1 宣告語法

int[] array1;           // 推薦風格
int array2[];           // C 風格
int[] array3, array4;   // 同時宣告多個

1.2 動態初始化(指定長度,預設值)

int[] arr = new int[5];        // {0, 0, 0, 0, 0}
String[] names = new String[3]; // {null, null, null}

1.3 靜態初始化(直接賦值)

int[] scores = {90, 85, 95, 100, 80};
String[] cities = new String[]{"Taipei", "Taichung", "Kaohsiung"}; // 匿名陣列

二、陣列複製——淺複製 vs 深複製

int[] src = {1, 2, 3};
int[] dest1 = src;                    // 參考複製,指向同一記憶體
int[] dest2 = src.clone();            // 深複製,新陣列
int[] dest3 = Arrays.copyOf(src, 3);  // 指定長度複製
int[] dest4 = new int[3];
System.arraycopy(src, 0, dest4, 0, 3); // 底層高效複製

注意:array1 = array2 僅是參考指向同一物件,非內容複製。

三、多維陣列

3.1 規則多維陣列(矩陣)

// 動態初始化
int[][] matrix = new int[3][3]; // 3 行 3 列

// 靜態初始化
int[][] matrix2 = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

3.2 不規則陣列(鋸齒陣列)

int[][] jagged = new int[3][]; // 先定行數
jagged[0] = new int[1]; // 第 0 行 1 列
jagged[1] = new int[2]; // 第 1 行 2 列
jagged[2] = new int[3]; // 第 2 行 3 列

// 靜態初始化
int[][] jagged2 = {
    {1},
    {2, 3},
    {4, 5, 6}
};

記憶體圖解:每一行是獨立的一維陣列物件,行長度可異。

四、高效遍歷方式

4.1 傳統 for 迴圈(適用一維、需索引)

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

4.2 增強 for 迴圈 / For-Each(唯讀遍歷)

// 一維陣列
for (int num : arr) {
    System.out.println(num);
}

// 多維陣列(必須嵌套)
for (int[] row : matrix) {
    for (int val : row) {
        System.out.print(val + " ");
    }
    System.out.println();
}

限制:無法修改陣列元素值,無法獲取索引,不適用於需反向或跳躍遍歷的場景。

4.3 Stream API(Java 8+ 函數式處理)

Arrays.stream(arr).forEach(System.out::println);
int sum = Arrays.stream(arr).sum();
int max = Arrays.stream(arr).max().orElse(0);

五、常用工具類 java.util.Arrays

方法說明
toString(arr)陣列轉字串,方便除錯
sort(arr)原地升序排序(雙軸快速排序)
binarySearch(arr, key)二分搜尋,**前提:已排序**
copyOf(arr, newLength)複製並調整長度
fill(arr, val)填充指定值
equals(arr1, arr2)內容比較
parallelSort(arr)並行排序(大陣列效能更佳)

六、效能與記憶體考量

  • 基本型別陣列:連續記憶體,緩存友好,效能最優
  • 物件參考陣列:存放參考,實際物件分散堆中
  • 大陣列分配:可能觸發 Full GC,考慮分批處理或使用緩衝區
  • 頻繁增刪:改用 ArrayList 或 LinkedList

七、常見陷阱避坑指南

  1. 索引越界:永遠記得 0 <= index < length
  2. NullPointerException:物件陣列預設為 null,使用前必須初始化每個元素
  3. 陣列不可變長:需變長請用集合或 Arrays.copyOf 重建
  4. 多維陣列長度:matrix.length 是行數,matrix[0].length 是第一行列數

總結

陣列是 Java 最基礎的資料結構,掌握其宣告、初始化、複製、遍歷與工具類用法,是寫出高效、正確程式碼的基石。實務上,基本型別資料處理首選陣列;業務邏輯層面向集合框架開發。

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