java.util.Arrays 是 JDK 提供的陣列瑞士刀,封裝了排序、搜尋、比較、填充、轉字串、串流轉換等高頻操作。善用它能大幅減少樣板碼,提升程式碼表達力。
| 方法 | 功能 | 備註 |
|---|---|---|
sort(T[] a) | 原地升序排序 (Dual-Pivot Quicksort / TimSort) | 基本型別用 QuickSort,物件用 TimSort (穩定) |
parallelSort(T[] a) | 多執行緒並行排序 (Java 8+) | 大陣列 (>10k) 效能顯著提升 |
binarySearch(T[] a, key) | 二分搜尋 (前提:已排序) | 回傳索引,找不到回傳 (-(插入點) - 1) |
toString(T[] a) | 陣列轉可讀字串 [a, b, c] | 多維陣列用 deepToString() |
equals(T[] a, T[] b) | 逐元素比較內容相等 | 多維用 deepEquals() |
copyOf(T[] a, newLen) | 複製並調整長度 | 擴容/縮容首選 |
fill(T[] a, val) | 填充指定值 | 初始化陣列極快 |
stream(T[] a) | 轉為 Stream 管道操作 | Java 8+ 函數式風格 |
spliterator(T[] a) | 取得 Spliterator 供並行流 | 進階用法 |
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
String[] hobbies = {"sports", "game", "movie"};
// 1. 原地排序 (依 Unicode 碼值,英文字母順序)
Arrays.sort(hobbies);
// 結果:[game, movie, sports]
// 2. 自訂比較器:長度優先,長度相同再字母序
Arrays.sort(hobbies, Comparator
.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder()));
// 結果:[game, movie, sports] (本例長度皆不同)
// 3. 輸出格式化
System.out.println("排序後:" + Arrays.toString(hobbies));
// 排序後:[game, movie, sports]
// 4. 並行排序大陣列 (Java 8+)
int[] big = new int[1_000_000];
new Random().ints(big.length, 0, 1_000_000).forEach(i -> big[i] = i);
Arrays.parallelSort(big); // 自動利用多核心
}
}
int[] nums = {5, 2, 8};
Arrays.sort(nums); // 快速排序,不穩定,基本型別無穩定性需求
Integer[] objs = {5, 2, 8};
Arrays.sort(objs); // TimSort,穩定排序,保留相等元素原始順序
int[][] matrix = {{3,1}, {2,4}};
Arrays.deepToString(matrix); // "[[3, 1], [2, 4]]"
Arrays.deepEquals(matrix, new int[][]{{3,1},{2,4}}); // true
int[] sorted = {10, 20, 30, 40, 50};
int idx = Arrays.binarySearch(sorted, 30); // 2
int notFound = Arrays.binarySearch(sorted, 25); // -3 (插入點索引 2,取負減1)
// 取得插入點:-(notFound + 1) = 2
String[] words = {"apple", "banana", "avocado"};
// 篩選以 a 開頭、轉大寫、收集為 List
List result = Arrays.stream(words)
.filter(w -> w.startsWith("a"))
.map(String::toUpperCase)
.collect(Collectors.toList());
// [APPLE, AVOCADO]
Arrays.sort(int[]):~45 msArrays.parallelSort(int[]):~18 ms (8 核心)Arrays.sort(String[]):~210 ms (物件比較較慢)小陣列 (< 1000) 無需並行排序,執行緒啟動開銷會抵消收益。
Arrays 類是陣列操作的「標準庫」,掌握 sort/parallelSort/binarySearch/toString/stream 五大核心方法,覆蓋 90% 以上日常場景。記住:基本型別用雙軸快排、物件用 TimSort、大陣列上並行、搜尋前必排序。