Java 2 重新設計的集合類庫核心目標是「保存物件」,分兩大體系:
List 維護插入順序;Set 不允許重複。Iterator 統一遍歷介面,屬輕量級物件。核心方法:iterator()、next()、hasNext()、remove()。ListIterator 專為 List 設計,支援雙向遍歷、插入、刪除。
| 實作 | 底層結構 | 隨機存取 | 中間插入/刪除 | 特有方法 | 適用場景 |
|---|---|---|---|---|---|
| ArrayList | 動態陣列 | 快 (O(1)) | 慢 (O(n)),需移動元素 | 無 | 頻繁隨機存取、少量修改 |
| LinkedList | 雙向鏈結串列 | 慢 (O(n)) | 快 (O(1)),僅調整指標 | addFirst/Last, getFirst/Last, removeFirst/Last | 頻繁插入刪除、堆疊/佇列/雙向佇列 |
建議:ListIterator 僅用於 LinkedList 雙向操作;ArrayList 僅用反向遍歷,避免插入刪除效能陷阱。
Set 不保證順序,元素需正確實作 equals()(HashSet 另需 hashCode())。
| 實作 | 底層結構 | 查詢速度 | 順序特性 | 適用場景 |
|---|---|---|---|---|
| HashSet | 雜湊表 | 最快 (O(1)) | 無序 | 高頻查詢、不需排序 |
| TreeSet | 紅黑樹 | O(log n) | 自然順序/Comparator 排序 | 需有序遍歷、範圍查詢 |
| LinkedHashSet | 雜湊表 + 雙向鏈結 | 接近 HashSet | 插入順序 | 需快速查詢且保持插入序 |
關鍵點:自訂類別存入 TreeSet 或需排序的 Set 必須實作 Comparable 並定義 compareTo()。
Map (HashMap/TreeMap/LinkedHashMap)List (ArrayList/LinkedList)TreeSetLinkedHashSetHashSet