陣列是**固定長度**、**有序**、**同質型別**的資料結構。Java 中陣列是物件,存放於堆記憶體,透過參考存取。
int[] array1; // 推薦風格
int array2[]; // C 風格
int[] array3, array4; // 同時宣告多個
int[] arr = new int[5]; // {0, 0, 0, 0, 0}
String[] names = new String[3]; // {null, null, null}
int[] scores = {90, 85, 95, 100, 80};
String[] cities = new String[]{"Taipei", "Taichung", "Kaohsiung"}; // 匿名陣列
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 僅是參考指向同一物件,非內容複製。
// 動態初始化
int[][] matrix = new int[3][3]; // 3 行 3 列
// 靜態初始化
int[][] matrix2 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
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}
};
記憶體圖解:每一行是獨立的一維陣列物件,行長度可異。
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 一維陣列
for (int num : arr) {
System.out.println(num);
}
// 多維陣列(必須嵌套)
for (int[] row : matrix) {
for (int val : row) {
System.out.print(val + " ");
}
System.out.println();
}
限制:無法修改陣列元素值,無法獲取索引,不適用於需反向或跳躍遍歷的場景。
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) | 並行排序(大陣列效能更佳) |
ArrayList 或 LinkedList0 <= index < lengthArrays.copyOf 重建matrix.length 是行數,matrix[0].length 是第一行列數陣列是 Java 最基礎的資料結構,掌握其宣告、初始化、複製、遍歷與工具類用法,是寫出高效、正確程式碼的基石。實務上,基本型別資料處理首選陣列;業務邏輯層面向集合框架開發。