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

Java 數據結構基礎:Enumeration 接口詳解與 Vector 遍歷實戰

     編輯:Java 綜合教學

前言

java.util.Enumeration 是早期 Java 集合框架(JDK 1.0)定義的元素遍歷接口,雖已被 Iterator 取代,但在歷史代碼、Vector、Properties、StringTokenizer 等類中仍廣泛存在。本文解析其核心方法、典型用法及與 Iterator 的關鍵差異。

一、Enumeration 接口定義

public interface Enumeration {
    // 判斷是否還有下一個元素
    boolean hasMoreElements();
    
    // 返回下一個元素,無元素時拋出 NoSuchElementException
    E nextElement();
}

二、核心方法詳解

方法返回值異常說明
hasMoreElements()boolean無檢查是否還有可遍歷元素,不移動指針
nextElement()ENoSuchElementException返回當前元素並將指針後移

三、典型使用場景:Vector.elements()

Vector 是少數仍保留 elements() 返回 Enumeration 的集合類:

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationDemo {
    public static void main(String[] args) {
        Vector months = new Vector<>();
        months.add("一月"); months.add("二月"); months.add("三月");
        months.add("四月"); months.add("五月"); months.add("六月");
        months.add("七月"); months.add("八月"); months.add("九月");
        months.add("十月"); months.add("十一月"); months.add("十二月");

        Enumeration em = months.elements();
        while (em.hasMoreElements()) {
            System.out.println(em.nextElement());
        }
    }
}

輸出結果

一月
二月
三月
...
十二月

四、Enumeration vs Iterator 關鍵差異

維度EnumerationIterator
引入版本JDK 1.0JDK 1.2 (Collections Framework)
移除支持❌ 無 remove()✅ 支持 remove()
故障快速❌ 不保證✅ fail-fast 機制
方法命名hasMoreElements / nextElementhasNext / next
適用集合Vector, Properties, StringTokenizer, 早期 API所有 Collection 實現
線程安全Vector.elements() 返回的枚舉非線程安全同樣非線程安全

五、現代替代方案

1. 增強 for 循環(推薦)

for (String month : months) {
    System.out.println(month);
}

2. Iterator 显式遍歷

Iterator it = months.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

3. Java 8+ Stream API

months.stream().forEach(System.out::println);
// 或並行處理
months.parallelStream().forEach(System.out::println);

六、遺留代碼兼容技巧

若需將 Enumeration 轉為現代集合:

// Enumeration → List
List list = Collections.list(months.elements());

// Enumeration → Iterator (Java 8+)
Iterator it = Collections.list(months.elements()).iterator();

七、總結

  • Enumeration 是歷史產物,新代碼不建議直接使用
  • 維護舊系統時,掌握 hasMoreElements()/nextElement() 循環模式即可
  • 優先使用增強 for、Iterator 或 Stream API,獲得類型安全、移除支持、並行處理等現代特性
  • Vector 本身也不推薦新代碼使用,優先選 ArrayList + 顯式同步或 CopyOnWriteArrayList
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved