JavaのEnumerationとIteratorの違い

JavaのEnumerationインターフェース

JavaのEnumerationインターフェースは、コレクション内の要素を順次取得するためのインターフェースです。
現在では、Iteratorインターフェースがより一般的に使用されていますが、Enumerationは依然として利用可能です。

Enumerationインターフェース

Enumerationインターフェースには2つの主要メソッドがあります。

  • hasMoreElements(): これ以上要素がある場合にtrueを返します。
  • nextElement(): 次の要素を返します。

以下は、Enumerationインターフェースを使用する簡単な例です。

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationExample {
    public static void main(String[] args) {
        // ベクターを作成し、要素を追加
        Vector<String> vector = new Vector<>();
        vector.add("Element 1");
        vector.add("Element 2");
        vector.add("Element 3");

        // Enumerationを取得
        Enumeration<String> enumeration = vector.elements();

        // 要素を列挙
        while (enumeration.hasMoreElements()) {
            String element = enumeration.nextElement();
            System.out.println(element);
        }
    }
}

この例では、Vectorクラスを使用して3つの要素を含むベクターを作成し、その要素をEnumerationを使用して列挙しています。
hasMoreElementsメソッドを使ってコレクションにまだ要素があるかを確認し、nextElementメソッドを使って次の要素を取得します。


Iteratorインターフェースを使用して実装した場合

import java.util.Vector;
import java.util.Iterator;

public class IteratorExample {
    public static void main(String[] args) {
        // ベクターを作成し、要素を追加
        Vector<String> vector = new Vector<>();
        vector.add("Element 1");
        vector.add("Element 2");
        vector.add("Element 3");

        // Iteratorを取得
        Iterator<String> iterator = vector.iterator();

        // 要素を列挙
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

以下は主な変更点です。

1. EnumerationをIteratorに置き換えました。
2. vector.elements()メソッドの代わりに、vector.iterator()メソッドを使用してIteratorを取得しました。
3. hasMoreElements()メソッドの代わりに、hasNext()メソッドを使用しています。
4. nextElement()メソッドの代わりに、next()メソッドを使用しています。

EnumerationとIteratorの違い

  • Iteratorインターフェースは、removeメソッドを提供し、コレクションから現在の要素を削除することができますが、Enumerationにはそのようなメソッドはありません。
  • Enumerationは古いコレクションフレームワークの一部であり、新しいコレクションにはIteratorの使用が推奨されています。

Enumerationインターフェースはレガシーコードで使用されることが多いため、Iteratorを使用することが一般的です。