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"