web-dev-qa-db-ja.com

Java:Set <String>からの列挙

コレクションに関する簡単な質問があります。 Set<String>オブジェクト。そのセット内の文字列の列挙が必要です。最もクリーンで最適な方法は何ですか?

47
well actually

編集:独自に作成する必要はありません(ただし、実装は後世のために残しておきます)-JDKに対するKevin Bourrillionの回答を参照してください。


really列挙が必要な場合、以下を使用できます。

Enumeration<String> x = new Vector(set).elements();

ただし、可能な場合はIterable<E>を使用することをお勧めします...

より良い代替方法は、Iterator<E>の周りに小さなラッパークラスを記述することです。そうすれば、Enumeration<E>の実装を見つけるためだけにコピーを取る必要がなくなります。

import Java.util.*;

class IteratorEnumeration<E> implements Enumeration<E>
{
    private final Iterator<E> iterator;

    public IteratorEnumeration(Iterator<E> iterator)
    {
        this.iterator = iterator;
    }

    public E nextElement() {
        return iterator.next();
    }

    public boolean hasMoreElements() {
        return iterator.hasNext();
    }

}


public class Test {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>(); 
        Enumeration<String> x = new IteratorEnumeration<String>(set.iterator());
    }
}
27
Jon Skeet

Java.util.Collections.enumeration(set)

Javadoc

指定されたコレクションの列挙を返します。これにより、入力として列挙を必要とするレガシーAPIとの相互運用性が提供されます。

193

数学的な意味で列挙を意味すると仮定すると、これを行う最もクリーンな方法は、Iterableを実装するすべてのクラスに適用可能なforループを使用することです。

_Set<String> strs = ...

for (String s : strs) {
 ...
}
_

本当にEnumerationが必要な場合は、iterator()を呼び出して返されるIteratorをラップするアダプタークラスを実装できます。 Apache Collectionsライブラリにはアダプタークラスがあります: IteratorEnumeration

または、GoogleのGuavaライブラリを使用できます。

_Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
_
5
Adamski