Java 提供了一個極為豐富的集合框架,涵蓋大量介面、抽象類別與具體實作類別。這些介面與類別協同工作,能滿足絕大多數資料聚合需求。下圖展示了整個框架的宏觀結構:

圖中左側為介面層,右側為實作類別,中間連線表示實作關係。例如 AbstractList 實作了 List 介面,其子類別自動繼承該介面。若類別實作某介面,則同時實作該介面所有父介面(如 TreeSet 實作 Deque,即同時實作 Queue、Collection、Iterable)。紅色標記為抽象類別(多以 Abstract 開頭),綠色為早期版本遺留類別(如 Vector、Hashtable)。
Java 集合類別庫嚴格區分介面與實作。以佇列(Queue)為例,介面定義核心行為:尾部新增、頭部移除、查詢大小,語意為先進先出(FIFO)。介面設計可能如下:
interface Queue<E> {
void add(E element);
E remove();
int size();
}
介面不規定內部實作細節。常見實作有循環陣列與鏈結串列兩種:
class CircularArrayQueue<E> implements Queue<E> {
CircularArrayQueue(int capacity) { ... }
public void add(E element) { ... }
public E remove() { ... }
private E[] elements;
private int head, tail;
}
class LinkedListQueue<E> implements Queue<E> {
LinkedListQueue() { ... }
public void add(E element) { ... }
public E remove() { ... }
public int size() { ... }
private Link head, tail;
}
實際開發中直接使用 LinkedList(實作 Queue)。建構集合物件時才指定具體類別,其餘程式碼皆面向介面:
Queue<Employee> q = new CircularArrayQueue<>(100);
q.add(new Employee("Harry"));
若需切換實作,僅需修改建構子呼叫處:
Queue<Employee> q = new LinkedListQueue<>();
q.add(new Employee("Harry"));
這體現了「面向介面程式設計」精髓:實作細節封裝於具體類別,使用者依據效能特性(如隨機存取、插入刪除效率)自行權衡選擇。框架中大量 Abstract* 抽象類別為實作者提供基礎方法實作,若要自訂佇列,繼承 AbstractQueue 比直接實作 Queue 更便捷。
Collection 是集合體系根介面,定義基礎操作:
boolean add(E element); Iterator<E> iterator();
add 成功改變集合回傳 true,iterator 回傳實作 Iterator 的物件,用於順序存取元素。Iterator 三大核心方法:
public interface Iterator<E> {
E next();
boolean hasNext();
void remove();
}
遍歷模式:
Collection<String> c = ...;
Iterator<String> it = c.iterator();
while (it.hasNext()) {
String element = it.next();
// 處理 element
}
Java SE 5.0 引入增強型 for 迴圈,編譯器自動轉換為迭代器模式:
for (String element : c) {
// 處理 element
}
此語法適用於所有實作 Iterable 的物件(Collection 繼承 Iterable)。
Java 迭代器概念上位於元素之間(如游標),next() 跨越下一元素並回傳該元素引用,位置隨之右移。remove() 刪除上次 next() 回傳的元素,故必須緊跟 next() 呼叫,否則拋出 IllegalStateException。連續刪除需交替呼叫 next():
it.next(); it.remove(); // 正確刪除第一個元素 it.next(); it.remove(); // 正確刪除下一個元素
集合類型決定遍歷順序:ArrayList 依索引遞增,HashSet 則為無序(雖能保證遍歷所有元素)。
Collection 介面方法眾多,涵蓋增刪查、批次操作、轉陣列、串流支援等:
public interface java.util.Collection<E> extends java.lang.Iterable<E> {
int size(); boolean isEmpty(); boolean contains(Object o);
Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a);
boolean add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o);
int hashCode(); Spliterator<E> spliterator(); Stream<E> stream(); Stream<E> parallelStream();
boolean removeIf(Predicate<? super E> filter);
}
為減輕實作者負擔,AbstractCollection 提供預設實作(如 isEmpty、contains),具體類別可繼承並選覆寫。

Collection 與 Map 為兩大核心介面,所有集合類別實作其中之一。Iterator、ListIterator(提供雙向遍歷與修改)為迭代器介面。RandomAccess 為標記介面,用於檢測是否支援高效隨機存取(如 ArrayList 實作)。

紅色為抽象類別,分為 Collection 體系與 Map 體系。14 個核心實作類別特性摘要:
| 集合類型 | 描述 |
|---|---|
| ArrayList | 動態增長縮減的索引序列 |
| LinkedList | 任意位置高效插入刪除的有序序列 |
| ArrayDeque | 循環陣列實作的雙端佇列 |
| HashSet | 無重複元素的無序集合 |
| TreeSet | 有序集合 |
| EnumSet | 列舉型別值集合 |
| LinkedHashSet | 記住插入順序的集合 |
| PriorityQueue | 高效刪除最小元素的佇列 |
| HashMap | 鍵值關聯資料結構 |
| TreeMap | 鍵值有序排列的映射表 |
| EnumMap | 鍵為列舉型別的映射表 |
| LinkedHashMap | 記住鍵值項添加次序的映射表 |
| WeakHashMap | 值無用時可被 GC 回收的映射表 |
| IdentityHashMap | 使用 == 而非 equals 比較鍵的映射表 |
關於有序性、元素可重複性總結(Map 考察鍵):
