陣列是有序數據集合,所有元素共享相同資料類型,透過統一陣列名與下標唯一確定元素。Java 陣列分一維與多維,本質上多維陣列是「陣列的陣列」。
// 宣告(不分配記憶體)
int[] intArray; // 推薦風格:類型後置 []
int intArray[]; // C 風格,不推薦
// 分配記憶體(必須用 new)
intArray = new int[3]; // 分配 3 個 int 空間
// 合併寫法
int[] intArray = new int[3];
關鍵差異: Java 宣告時不指定長度,長度在 new 時確定;C/C++ 宣告時須指定長度。
0 到 length-1,越界拋出 ArrayIndexOutOfBoundsException(C/C++ 未定義行為)。length 屬性(非方法),如 intArray.length。// 靜態初始化(大括號列表)
int[] a = {1, 2, 3, 4, 5}; // 系統自動計算長度
// 動態初始化(new + 索引賦值)
int[] b = new int[5];
for (int i = 0; i < b.length; i++) b[i] = i * 2;
Java 不要求陣列為 static 即可靜態初始化(C 需求)。
public class ArrayTest {
public static void main(String[] args) {
int[] a = new int[5];
for (int i = 0; i < 5; i++) a[i] = i;
for (int i = a.length - 1; i >= 0; i--)
System.out.println("a[" + i + "] = " + a[i]);
}
}
public class Fibonacci {
public static void main(String[] args) {
int[] f = new int[10];
f[0] = f[1] = 1;
for (int i = 2; i < 10; i++) f[i] = f[i-1] + f[i-2];
for (int i = 1; i <= 10; i++) System.out.println("F[" + i + "] = " + f[i-1]);
}
}
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {30, 1, -9, 70, 25};
int n = arr.length;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (arr[i] > arr[j]) {
int t = arr[i]; arr[i] = arr[j]; arr[j] = t;
}
for (int v : arr) System.out.print(v + " "); // -9 1 25 30 70
}
}
// 二維陣列宣告
int[][] matrix; // 推薦
int matrix[][]; // 不推薦
// 分配方式一:一次性指定所有維度
int[][] a = new int[2][3]; // 2 行 3 列
// 分配方式二:分步分配(Java 特有,C/C++ 不支援)
int[][] b = new int[2][];
b[0] = new int[3];
b[1] = new int[3];
// 甚至可建立不規則陣列(jagged array):
int[][] c = new int[3][];
c[0] = new int[2];
c[1] = new int[4];
c[2] = new int[1];
arrayName[index1][index2],各維下標獨立從 0 開始。
// 靜態初始化
int[][] m = {{2, 3}, {1, 5}, {3, 4}}; // 3 行 2 列
// 動態初始化
int[][] n = new int[2][3];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
n[i][j] = (i+1) * (j+1);
public class MatrixMultiply {
public static void main(String[] args) {
int[][] a = new int[2][3];
int[][] b = {{1,5,2,8}, {5,9,10,-3}, {2,7,-5,-18}};
int[][] c = new int[2][4];
// 初始化 A
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
a[i][j] = (i+1) * (j+2);
// 矩陣乘法 C = A × B
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
c[i][j] = 0;
for (int k = 0; k < 3; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
// 輸出結果
System.out.println("*** Matrix A ***");
printMatrix(a);
System.out.println("*** Matrix B ***");
printMatrix(b);
System.out.println("*** Matrix C ***");
printMatrix(c);
}
static void printMatrix(int[][] m) {
for (int[] row : m) {
for (int v : row) System.out.print(v + " ");
System.out.println();
}
}
}
System.arraycopy()、Arrays.copyOf()、clone()(淺拷貝)。java.util.Arrays 提供排序、查找、比較、填充、轉字串等靜態方法。new T[10] 非法),需用 List<T> 或 (T[]) new Object[size](需謹慎)。Java 陣列以安全性(邊界檢查)、length 屬性、靈活的多維結構(支援不規則陣列)區別於 C/C++。熟練掌握宣告、初始化、遍歷與經典算法(費波那契、排序、矩陣運算)是 Java 基礎編程的核心技能。實際開發中,集合框架(ArrayList、LinkedList 等)常取代陣列以獲得動態擴容與豐富 API,但陣列在效能敏感、定長、原始類型存儲場景仍具不可替代優勢。