Java Collections Framework 提供了一組強大的多態演算法,這些可重用的功能片段全部位於 Collections 類中,以靜態方法形式呈現。大多數演算法操作 List 介面,僅有 min 和 max 支援任意 Collection。本文將系統性剖析排序、混排、資料操作、搜尋與極值查找五大核心演算法類別。
sort 方法提供兩種形式:單參數版依據元素自然順序排序;雙參數版接受 Comparator 實現自訂排序。底層採用優化的合併排序,具備 O(n log n) 時間複雜度 且為 穩定排序——相等元素相對位置不變,這對多鍵值排序至關重要(如先按日期再按寄件人排序郵件)。
import java.util.*;
public class Sort {
public static void main(String[] args) {
List<String> list = Arrays.asList(args);
Collections.sort(list);
System.out.println(list);
}
}
執行 java Sort i walk the line 輸出 [i, line, the, walk],展示字典序排序效果。
shuffle 將有序列表打亂,基於隨機源生成等概率排列,適用於撲克牌遊戲、測試案例生成等場景。提供預設隨機源與自訂 Random 物件兩種形式。
reverse:反轉列表順序fill:用指定值覆蓋所有元素,適合初始化copy:從來源列表複製元素到目標列表(目標長度需 ≥ 來源)binarySearch 要求列表預先排序。兩種形式分別對應自然順序與 Comparator 順序。回傳值設計巧妙:找到時回傳索引;未找到時回傳 -(插入點) - 1,確保「找到 ⇔ 回傳值 ≥ 0」。典型插入慣用語:
int pos = Collections.binarySearch(list, key);
if (pos < 0) list.add(-pos - 1, key);
min/max 是唯二操作任意 Collection 的演算法,同樣支援自然順序與 Comparator 兩種形式,API 簡潔實用。
掌握這些演算法,能讓集合操作更高效、更優雅,是 Java 開發者必備的核心技能。