Enumeration(枚舉)接口的作用和Iterator類似,只提供了遍歷Vector和Hashtable類型集合元素的功能,不支持元素的移除操作。
Java8中Enumeration接口的源碼:
package java.util; public interface Enumeration<E> { /** * Tests if this enumeration contains more elements. * * @return <code>true</code> if and only if this enumeration object * contains at least one more element to provide; * <code>false</code> otherwise. */ boolean hasMoreElements();//判斷是否包含元素 /** * Returns the next element of this enumeration if this enumeration * object has at least one more element to provide. * * @return the next element of this enumeration. * @exception NoSuchElementException if no more elements exist. */ E nextElement();//獲得下一個元素 }
(1)boolean hasMoreElements();//是否還有元素,如果有返回true,否則表示至少含有一個元素
(2)E nextElement();//如果Enumeration枚舉對象還有元素,返回對象只能的下一個元素,否則拋出NoSuchElementException異常。
簡單示例:
package com.dxz.jdk.enumtest; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; public class TestEnumeration { public static void main(String[] args) { Vector v = new Vector(); v.addElement("Lisa"); v.addElement("Billy"); v.addElement("Mr Brown"); Enumeration e = v.elements();// 返回Enumeration對象 while (e.hasMoreElements()) { String value = (String) e.nextElement();// 調用nextElement方法獲得元素 System.out.println(value); } System.out.println(); Hashtable ht = new Hashtable(); ht.put("a", "1"); ht.put("b", "2"); ht.put("c", "3"); Enumeration elements = ht.elements(); while (elements.hasMoreElements()) { String value = (String) elements.nextElement();// 調用nextElement方法獲得元素 System.out.println(value); } } }
結果:
Lisa
Billy
Mr Brown
2
1
3
sun下的CompoundEnumeration
package sun.misc; import java.util.Enumeration; import java.util.NoSuchElementException; /* * A useful utility class that will enumerate over an array of * enumerations. */ public class CompoundEnumeration<E> implements Enumeration<E> { private Enumeration<E>[] enums; private int index = 0; public CompoundEnumeration(Enumeration<E>[] enums) { this.enums = enums; } private boolean next() { while (index < enums.length) { if (enums[index] != null && enums[index].hasMoreElements()) { return true; } index++; } return false; } public boolean hasMoreElements() { return next(); } public E nextElement() { if (!next()) { throw new NoSuchElementException(); } return enums[index].nextElement(); } }
查看sun.misc下的代碼:
-
下載對應的 openJDK,我這里下載的是
jdk-jdk8-b120.zip -
把系統 JDK 路徑中 src 備份,復制一份到桌面進行解壓
-
把
jdk-jdk8-b120.zip中的jdk-jdk8-b120\jdk\src\share\classes\sun復制到桌面中 src 中

