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

Java Vector 與 Enumeration 詳解:唯讀舊集合、枚舉遍歷與現代替代方案

     編輯:Java 綜合教學

Vector 核心特點

  • JDK 1.0 遺留類,方法同步 (線程安全),效能低於 ArrayList。
  • 底層動態數組,擴容預設 2 倍 (ArrayList 1.5 倍)。
  • 提供 capacity()、ensureCapacity()、trimToSize() 容量控制方法。
  • 棧操作:push/pop/peek (繼承自 Stack)。

Enumeration (枚舉) 遍歷

Vector 專有遍歷方式 (也是早期所有集合通用介面),已被 Iterator 取代。

Vector v = new Vector<>();
v.add("Java基礎");
v.add("集合框架");
v.add("多線程");

Enumeration en = v.elements(); // 獲取枚舉
while (en.hasMoreElements()) {
    System.out.println(en.nextElement());
}

Enumeration vs Iterator 對比

特性EnumerationIterator
方法名hasMoreElements() / nextElement()hasNext() / next()
刪除支援無remove()
適用範圍Vector、Hashtable、屬性列表所有 Collection
Fail-Fast無 (Vector 同步鎖保護)有 (非同步集合)
現代地位棄用 (Legacy)標準

現代替代方案

  1. 單線程:ArrayList + for-each / iterator() / stream()。
  2. 多線程只讀/少寫:CopyOnWriteArrayList (寫時復制,遍歷無鎖)。
  3. 多線程高併發讀寫:Collections.synchronizedList(new ArrayList<>()) (鎖住整個列表) 或 ConcurrentLinkedQueue (無鎖佇列)。
  4. 需棧/雙端佇列:ArrayDeque (非同步、高性能)。

避坑指南

  • 新代碼不要使用 Vector/Enumeration,除非維護極舊系統或與舊 API 交互 (如 HttpServletRequest.getParameterNames() 返回 Enumeration)。
  • Vector 同步是方法級鎖,複合操作 (如「判斷大小後獲取」) 仍需外部同步。
  • Enumeration 無 remove(),遍歷中無法安全刪除。

總結

Vector 與 Enumeration 是 Java 早期集合框架產物,已被 ArrayList/Iterator/並發包完全取代。了解其歷史地位、API 差異與現代替代方案,有助於維護舊代碼、避免在新項目誤用,並在面試中展現對集合演進歷程的理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved