Java-Enumeration ( 枚举类)

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();//获得下一个元素
}
通过Enumeration的源码分析可得,Enumeration有两个方法:
(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 中

 

 

 
posted on 2021-07-22 19:31  duanxz  阅读(1795)  评论(0编辑  收藏  举报