當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Enumeration用法及代碼示例


java.util.枚舉接口是預定義接口之一,其對象用於從集合框架變量中檢索數據(例如Stack,Vector,HashTable等)僅在向前方向上,而不在向後方向上。該接口已被迭代器取代。

枚舉接口定義了我們可以枚舉元素集合中的元素的函數。對於新代碼,枚舉被認為是過時的。但是,遺留類的一些方法(例如向量和屬性)、一些 API 類、應用程序代碼都使用此枚舉接口。

重要特點

  • 枚舉是同步的。
  • 它不支持添加、刪除或替換元素。
  • 可以使用枚舉向前訪問舊集合的元素。
  • 遺留類具有使用枚舉的方法並返回枚舉對象。

聲明

public interface Enumeration<E>

其中 E 是存儲在 Collection 中的元素的類型。

Enumeration接口的sub-interfaces是NamingEnumeration,實現類是StringTokenizer

創建枚舉對象

Vector ve = new Vector();
Enumeration e = v.elements();

例子:

Java


// Java program to test Enumeration
import java.util.Vector;
import java.util.Enumeration;
public class EnumerationClass {
    public static void main(String args[])
    {
        Enumeration months;
        Vector<String> monthNames = new Vector<>();
        monthNames.add("January");
        monthNames.add("February");
        monthNames.add("March");
        monthNames.add("April");
        monthNames.add("May");
        monthNames.add("June");
        monthNames.add("July");
        monthNames.add("August");
        monthNames.add("September");
        monthNames.add("October");
        monthNames.add("November");
        monthNames.add("December");
        months = monthNames.elements();
        while (months.hasMoreElements()) {
            System.out.println(months.nextElement());
        }
    }
}
輸出
January
February
March
April
May
June
July
August
September
October
November
December

Java 枚舉接口SequenceInputStream

Java


import java.io.*;
import java.util.*;
class GFG {
    public static void main(String args[])
        throws IOException
    {
        // creating the FileInputStream objects for all the
        // files
        FileInputStream fin
            = new FileInputStream("file1.txt");
        FileInputStream fin2
            = new FileInputStream("file2.txt");
        FileInputStream fin3
            = new FileInputStream("file3.txt");
        FileInputStream fin4
            = new FileInputStream("file4.txt");
        // creating Vector object to all the stream
        Vector v = new Vector();
        v.add(fin);
        v.add(fin2);
        v.add(fin3);
        v.add(fin4);
        // creating enumeration object by calling the
        // elements method
        Enumeration e = v.elements();
        // passing the enumeration object in the constructor
        SequenceInputStream bin
            = new SequenceInputStream(e);
        int i = 0;
        while ((i = bin.read()) != -1) {
            System.out.print((char)i);
        }
        bin.close();
        fin.close();
        fin2.close();
    }
}

創建自定義枚舉

Java


import java.util.Enumeration;
import java.lang.reflect.Array;
public class EnumerationClass implements Enumeration {
    private int size;
    private int cursor;
    private final Object array;
    public EnumerationClass(Object obj)
    {
        Class type = obj.getClass();
        if (!type.isArray()) {
            throw new IllegalArgumentException(
                "Invalid type: " + type);
        }
        size = Array.getLength(obj);
        array = obj;
    }
    public boolean hasMoreElements()
    {
        return (cursor < size);
    }
    public object nextElements()
    {
        return Array.get(array, cursor++);
    }
}


使用字符串數組創建 Java 枚舉

Java


import java.util.*;
import java.io.*;
public class EnumerationExample {
    public static void main(String args[])
    {
        // String Array Creation
        String str[] = { "apple", "facebook", "google" };
        // Array Enumeration Creation
        ArrayEnumeration aenum = new ArrayEnumeration(str);
        // usageof array enumeration
        while (aenum.hasMoreElements()) {
            System.out.println(aenum.nextElement());
        }
    }
}

枚舉接口方法

  • E-元素類型

修飾符和類型

方法

Explanation

默認迭代器<E> asIterator() 此方法返回一個迭代器,該迭代器遍曆此枚舉涵蓋的所有剩餘元素。
boolean hasMoreElements() 在實現時,如果還有更多元素需要提取,則返回布爾值;如果所有元素都已枚舉,則返回 false。
E nextElement() 此方法返回枚舉的下一個元素。它拋出NoSuchElementException當沒有更多元素時。


相關用法


注:本文由純淨天空篩選整理自goelshubhangi3118大神的英文原創作品 Enumeration Interface In Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。