容器類別是提升開發效率的關鍵工具。在 Java 2 平台中,所有容器類別由 Joshua Bloch 重新設計,大幅豐富了類別庫功能。Java 容器的核心使命是「保存物件」,主要分為兩大體系:
List 維護元素插入順序,Set 則確保元素唯一性。迭代器是一種設計模式,讓開發者無需了解底層結構即可遍歷序列。Java 的 Iterator 屬輕量級物件,僅支援單向移動:
iterator() 取得迭代器,首次呼叫 next() 返回第一個元素。next() 獲取下一個元素。hasNext() 檢查是否還有元素。remove() 刪除迭代器新返回的元素。專為 List 設計的 ListIterator 功能更強,支援雙向遍歷、插入與刪除元素。
順序是 List 最重要特徵,確保元素特定順序。List 在 Collection 基礎上新增多個方法,支援在中間插入、移除元素(推薦搭配 LinkedList 使用)。List 可產生 ListIterator,實現雙向遍歷與中間修改。
基於陣列實作,提供快速隨機存取(O(1)),但中間插入/刪除效率低(O(n))。ListIterator 僅建議用於反向遍歷 ArrayList,不宜用於插入刪除,因開銷遠大於 LinkedList。
針對順序存取優化,中間插入/刪除開銷小(O(1)),隨機存取較慢(可用 ArrayList 替代)。獨有 addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast() 等方法,可作為堆疊、佇列與雙向佇列使用。
Set 不允許重複元素,存入物件必須正確實作 equals() 以確保唯一性。Set 與 Collection 擁有相同介面,不保證維護元素順序。
專為快速查找設計,內部採用雜湊函數。存入物件必須實作 hashCode(),效能最佳但無序。
基於紅黑樹結構,自動維護元素排序,適合需提取有序序列的場景。
結合 HashSet 查詢速度與鏈結串列維護插入順序,迭代時按插入順序返回元素。
| 實作類別 | 底層結構 | 順序特性 | 查找/插入/刪除效能 | 適用場景 |
|---|---|---|---|---|
| ArrayList | 動態陣列 | 插入順序 | 隨機存取 O(1),中間修改 O(n) | 頻繁隨機存取、較少中間修改 |
| LinkedList | 雙向鏈結串列 | 插入順序 | 序列存取優、中間修改 O(1) | 頻繁頭尾操作、堆疊/佇列、大量中間修改 |
| HashSet | 雜湊表 | 無序 | O(1) 平均 | 高效去重、快速查找、不需順序 |
| TreeSet | 紅黑樹 | 自然順序/比較器順序 | O(log n) | 需有序集合、範圍查詢 |
| LinkedHashSet | 雜湊表+雙向鏈結串列 | 插入順序 | O(1) 平均 | 需保持插入順序的高效去重 |
注意:自訂類別存入 TreeSet 或作為 HashSet 元素時,需實作 Comparable 介面並定義 compareTo(),或提供 Comparator,以確保正確排序與唯一性判斷。