Java 陣列 (Array)

陣列是用來儲存多個相同型別元素的資料結構。

宣告陣列

// 方式一:先宣告再建立
int[] numbers;
numbers = new int[5];

// 方式二:宣告時同時建立
int[] numbers2 = new int[5];

// 方式三:宣告並初始化
int[] numbers3 = {10, 20, 30, 40, 50};

// 方式四:使用 new 並初始化
int[] numbers4 = new int[]{10, 20, 30, 40, 50};

存取元素

陣列索引從 0 開始:

int[] numbers = {10, 20, 30, 40, 50};

// 讀取
System.out.println(numbers[0]);  // 10
System.out.println(numbers[2]);  // 30

// 修改
numbers[0] = 100;
System.out.println(numbers[0]);  // 100

陣列長度

int[] numbers = {10, 20, 30, 40, 50};
System.out.println(numbers.length);  // 5
陣列的長度是固定的,建立後不能改變大小。

遍歷陣列

for 迴圈

int[] numbers = {10, 20, 30, 40, 50};

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

for-each 迴圈

int[] numbers = {10, 20, 30, 40, 50};

for (int num : numbers) {
    System.out.println(num);
}

陣列預設值

int[] intArr = new int[3];      // [0, 0, 0]
double[] dblArr = new double[3]; // [0.0, 0.0, 0.0]
boolean[] boolArr = new boolean[3]; // [false, false, false]
String[] strArr = new String[3];  // [null, null, null]

常用操作

計算總和

int[] numbers = {10, 20, 30, 40, 50};
int sum = 0;

for (int num : numbers) {
    sum += num;
}

System.out.println("總和:" + sum);  // 150

找最大值

int[] numbers = {23, 45, 12, 67, 34};
int max = numbers[0];

for (int num : numbers) {
    if (num > max) {
        max = num;
    }
}

System.out.println("最大值:" + max);  // 67

搜尋元素

int[] numbers = {10, 20, 30, 40, 50};
int target = 30;
int index = -1;

for (int i = 0; i < numbers.length; i++) {
    if (numbers[i] == target) {
        index = i;
        break;
    }
}

System.out.println("索引:" + index);  // 2

反轉陣列

int[] arr = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.length / 2; i++) {
    int temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
}
// arr = {5, 4, 3, 2, 1}

複製陣列

int[] original = {1, 2, 3, 4, 5};

// 方式一:手動複製
int[] copy1 = new int[original.length];
for (int i = 0; i < original.length; i++) {
    copy1[i] = original[i];
}

// 方式二:System.arraycopy()
int[] copy2 = new int[original.length];
System.arraycopy(original, 0, copy2, 0, original.length);

// 方式三:Arrays.copyOf()
int[] copy3 = Arrays.copyOf(original, original.length);

// 方式四:clone()
int[] copy4 = original.clone();

多維陣列

請參考 Java 多維陣列

Arrays 工具類別

java.util.Arrays 提供許多陣列操作方法:

import java.util.Arrays;

int[] numbers = {5, 2, 8, 1, 9};

// 排序
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));  // [1, 2, 5, 8, 9]

// 二分搜尋(需要先排序)
int index = Arrays.binarySearch(numbers, 5);
System.out.println(index);  // 2

// 填充
int[] arr = new int[5];
Arrays.fill(arr, 10);
System.out.println(Arrays.toString(arr));  // [10, 10, 10, 10, 10]

// 比較
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2));  // true

更多說明請參考 Java Arrays 類別

陣列越界

存取超出範圍的索引會拋出 ArrayIndexOutOfBoundsException

int[] arr = {1, 2, 3};

// arr[3] = 10;  // ArrayIndexOutOfBoundsException
// arr[-1] = 5;  // ArrayIndexOutOfBoundsException

陣列是物件

在 Java 中,陣列是物件:

int[] arr = {1, 2, 3};

System.out.println(arr instanceof Object);  // true
System.out.println(arr.getClass().getName());  // [I

// 傳入方法時是傳參考
modifyArray(arr);  // 會改變原陣列

字串陣列

String[] fruits = {"apple", "banana", "cherry"};

for (String fruit : fruits) {
    System.out.println(fruit);
}

// 字串連接
String result = String.join(", ", fruits);
System.out.println(result);  // "apple, banana, cherry"