首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 集合框架架構詳細解析

     編輯:Java 程式設計入門

Java 集合框架概述

Java 集合框架提供了一套管理對象集合的統一接口與類,包含介面、實現類與演算法。它位於 java.util 套件中,是 Java 開發中處理資料結構的核心基礎設施。

核心介面體系

Collection 介面

Collection 是最基礎的集合介面,代表一組 Object(元素)。它不直接提供實作類,而是透過子介面 List 和 Set 來定義具體行為。所有實作 Collection 的類別必須提供兩個標準建構子:無參數建構子建立空集合,以及接受另一個 Collection 參數的建構子用於複製元素。

遍歷集合:Iterator 模式

無論具體實作為何,所有 Collection 都支援 iterator() 方法,回傳一個 Iterator 物件,使我們能逐一存取元素:

Iterator it = collection.iterator();
while (it.hasNext()) {
    Object obj = it.next();
    // 處理 obj
}

List 介面:有序、可重複

List 繼承自 Collection,保持元素插入順序,允許重複元素,並支援索引存取(類似陣列)。常用實作類有 ArrayList、LinkedList、Vector 和 Stack。List 還提供 listIterator() 回傳 ListIterator,支援雙向遍歷與元素修改。

ArrayList:動態陣列

  • 底層為可變大小陣列,允許 null 元素。
  • size、isEmpty、get、set 為常數時間;add 為攤還常數時間。
  • 非同步,效率較高;可透過 ensureCapacity 預先擴容提升大量插入效能。

LinkedList:雙向鏈結串列

  • 實作 List 介面,允許 null,提供首尾操作方法,可作為堆疊、佇列或雙端佇列使用。
  • 非同步,多執行緒環境需自行同步(如 Collections.synchronizedList)。

Vector:同步動態陣列

  • 功能類似 ArrayList,但方法為同步,執行緒安全。
  • 迭代器在並發修改時會拋出 ConcurrentModificationException。

Stack:後進先出堆疊

  • 繼承 Vector,提供 push、pop、peek、empty、search 等堆疊操作。

Set 介面:不重複集合

Set 不允許重複元素(以 equals() 判斷),最多包含一個 null。建構子要求傳入的 Collection 不含重複元素。需注意可變物件若在放入後修改導致 equals 回傳 true,會破壞 Set 不變性。

Map 介面:鍵值對映射

Map 不繼承 Collection,提供 Key 到 Value 的映射,Key 唯一。提供三種視圖:Key 集合、Value 集合、Key-Value 對集合。

Hashtable:同步雜湊表

  • Key/Value 不可為 null;put/get 為常數時間。
  • 透過 initialCapacity 和 loadFactor (預設 0.75) 調整效能。
  • Key 必須正確覆寫 hashCode() 和 equals(),否則會導致查找失敗。

HashMap:非同步雜湊表

  • 允許 null Key 和 Value;非同步,效能優於 Hashtable。
  • 迭代時間與容量成正比,避免初始容量過大或 load factor 過低。

WeakHashMap:弱引用映射

  • Key 為弱引用,外部無強引用時可被 GC 回收,適合快取場景。

選擇指南與最佳實踐

  • 頻繁插入/刪除:選 LinkedList。
  • 快速隨機存取:選 ArrayList。
  • 單執行緒/單一執行緒存取:優先用非同步類別(ArrayList、HashMap)提升效能。
  • 多執行緒共享:使用同步類別(Vector、Hashtable)或 Collections.synchronizedXxx 包裝。
  • Map 的 Key:務必同時覆寫 equals() 和 hashCode()。
  • 面向介面編程:回傳型別宣告為 List、Set、Map 而非具體實作類,便於日後替換實作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved