數組是 Java 最基礎的資料結構,掌握其核心操作與 java.util.Arrays 工具類,能大幅提升編碼效率。本文系統整理 15 大常用操作,附完整可運行代碼,適合速查與面試複習。
// 聲明
String[] strArr;
int[] intArr;
// 靜態初始化
String[] names = {"馬超", "馬雲", "關羽"};
int[] scores = new int[]{100, 90, 80};
// 動態初始化
int[] dynamic = new int[5];
for (int i = 0; i < dynamic.length; i++) dynamic[i] = i + 1;
int len = names.length; // 長度不可變
for (int i = 0; i < len; i++) System.out.println(names[i]);
// Java 5+ 增強 for
for (String n : names) System.out.println(n);
| 需求 | 方法 | 範例 |
|---|---|---|
| 轉字串輸出 | toString(arr) | Arrays.toString(new int[]{1,2,3}) → "[1, 2, 3]" |
| 轉 List | asList(arr) | List<String> list = Arrays.asList(names);(定長) |
| 轉 Set(去重) | new HashSet<>(Arrays.asList(arr)) | 利用 Set 不重複特性 |
| 判斷包含 | Arrays.asList(arr).contains(val) | 僅適用引用類型,基本型需裝箱 |
| 填充值 | fill(arr, val) | Arrays.fill(arr, 0); |
| 排序 | sort(arr) / sort(arr, from, to) | 原地排序,支援部分區間 |
| 複製 | copyOf(arr, newLen) / copyOfRange(arr, from, to) | 後者不含 to 索引 |
| 比較內容 | equals(arr1, arr2) | 長度相同且對應元素 equals 為 true |
| 二分查找 | binarySearch(arr, key) | 前提:已排序 |
int[] src = {1,2,3,2,4,3,5};
Set<Integer> set = new LinkedHashSet<>(); // 保持順序
for (int v : src) set.add(v);
int[] distinct = set.stream().mapToInt(Integer::intValue).toArray();
// Java 8+ 一行流:Arrays.stream(src).distinct().toArray()
int max = Arrays.stream(arr).max().orElse(Integer.MIN_VALUE);
int min = Arrays.stream(arr).min().orElse(Integer.MAX_VALUE);
// 或傳統迴圈,避免 Stream 開銷
package demo;
import java.util.*;
public class ArrayDemo {
public static void main(String[] args) {
String[] names = {"馬超", "馬雲", "關羽", "劉備", "張飛"};
System.out.println("長度:" + names.length);
System.out.println("包含馬超:" + Arrays.asList(names).contains("馬超"));
System.out.println("轉 List:" + Arrays.asList(names));
System.out.println("轉 Set:" + new HashSet<>(Arrays.asList(names)));
int[] nums = {3, 7, 2, 1, 9};
Arrays.sort(nums);
System.out.println("排序後:" + Arrays.toString(nums));
int[] dup = {1,2,3,2,4,3};
int[] unique = Arrays.stream(dup).distinct().toArray();
System.out.println("去重:" + Arrays.toString(unique));
}
}
Arrays.asList 返回的 List 不可增刪(長度固定),需 `new ArrayList<>(Arrays.asList(...))` 取得可變 List。int[])無法直接用 Arrays.asList 轉 List<Integer>,需手動裝箱或用 Stream API。sort、binarySearch 會修改原數組,若需保留原序請先複製。熟練掌握 Arrays 與 Stream API 的組合拳,能以最少代碼完成 90% 的數組處理需求。建議收藏本文速查表,實戰中「用工具類、少手寫迴圈」。