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 中

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM