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 中