初學者極易混淆 Collection (單數、介面) 與 Collections (複數、工具類)。本文從定義、層級、核心方法、使用場景四個維度徹底釐清。
java.util.Collection 是集合框架的**頂層介面** (除 Map 外)add/remove/contains/size/iterator/stream 等List (有序、可重複)、Set (無序、唯一)、Queue (佇列)ArrayList, LinkedList, Vector, StackHashSet, LinkedHashSet, TreeSetPriorityQueue, ArrayDequeCollection (介面) ├─ List (介面) │ ├─ ArrayList │ ├─ LinkedList │ ├─ Vector │ │ └─ Stack └─ Set (介面) ├─ HashSet ├─ LinkedHashSet └─ TreeSet
java.util.Collections 是 **final 工具類**,不可實例化 (私有構造子)Collection 介面的物件sort(List), sort(List, Comparator)binarySearch(List, key), max/min(Collection)fill(List, obj), copy(dest, src)reverse(List), shuffle(List)synchronizedList/Set/Map()unmodifiableList/Set/Map()singletonList/Set/Map()import java.util.*;
public class CollectionVsCollections {
public static void main(String[] args) {
// 1. Collection 多態引用
List list = new ArrayList<>(); // List 實現 Collection
double[] data = {112, 111, 23, 456, 231};
for (double d : data) list.add(d);
// 2. Collections 工具類操作
Collections.sort(list); // 自然排序 (升序)
// 3. 遍歷輸出
for (Double d : list) {
System.out.println(d); // 23.0, 111.0, 112.0, 231.0, 456.0
}
// 4. 更多 Collections 實用操作
Collections.shuffle(list); // 隨機打亂
Collections.reverse(list); // 反轉
Double max = Collections.max(list); // 最大值
int idx = Collections.binarySearch(list, 112.0); // 二分查找 (需有序)
// 5. 同步包裝 (執行緒安全視圖)
List syncList = Collections.synchronizedList(new ArrayList<>());
// 6. 不可變視圖 (防禦性編程)
List unmod = Collections.unmodifiableList(list);
// unmod.add(1.0); // 拋出 UnsupportedOperationException
}
}
| 維度 | Collection (介面) | Collections (工具類) |
|---|---|---|
| 類型 | 介面 | final class |
| 實例化 | 透過實現類 new ArrayList() | 不可實例化 (私有構造子) |
| 方法性質 | 實例方法 (多態調用) | 靜態方法 (工具調用) |
| 核心職責 | 定義集合通用契約 | 提供演算法與包裝操作 |
| 繼承關係 | List/Set/Queue 繼承它 | 無繼承,獨立工具類 |
| 記憶口訣 | 單數 = 介面 | 複數 = 工具類 |
get(int index) 方法?List 子介面才有。Set 無索引概念。Comparable,或傳入 Comparator。synchronized,迭代時需手動同步。