2011-08-16 8 views
45

私は単純なコレクションの質問があります。私はSet<String>オブジェクトを持っています。私はそのセットの文字列の列挙が欲しいです。それについて最善の方法は何ですか。Java:セットからの列挙<String>

+1

java.util.Enumerationの列挙型ですか?代わりにjava.util.Iterableを使用しない理由は何ですか? –

+2

はい、私は具体的にEnumeration を返すメソッドをオーバーライドしているためです。 – Charlotte

+1

私は代わりに最も投票された答えを受け入れるべきだと思います。 –

答えて

26

編集:自分で書く必要はありません(私は後世のために実装を残していますが).JDKにあるKevin Bourrillionの答えを参照してください。


あなた本当にが使用できる可能性があり、列挙が必要な場合:より良い代替手段がある...

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

をすべてで可能な場合はいえIterable<E>を使用する方が良いでしょう

Iterator<E>の周りに小さなラッパークラスを書く。あなただけEnumeration<E>のimlementationを見つけるために、コピーを取る必要はありませんその方法:あなたがこれを行うにはクリーンな方法は、forループを経由している数学的な意味での列挙を意味すると仮定すると、

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()); 
    } 
} 
+0

@Downvoter:コメントしますか? –

+0

私はちょうど投票されました。 JDKに静的なutilメソッドがある場合は、独自の実装を書く必要はありません。Kevin Bourrillionによって指摘されています。 – Snekse

+1

@Snekse:もし前のdownvoterがそれほど多く言っていたなら、それは助けになったでしょう。私はそれが受け入れられたものとして私の答えを削除することはできませんが、私はケビンの指摘することができます... –

5

、いずれにも適用Iterableを実装するクラス:

Set<String> strs = ... 

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

あなたが本当にEnumerationが必要な場合は、iterator()を呼び出すことによって返さIteratorをラップするアダプタクラスを実装することができます。 Apacheコレクション・ライブラリーにアダプター・クラスがあります:IteratorEnumeration

それとも、Googleのグアバライブラリを使用することができます。

Set<String> mySet = ... 
Enumeration<String> = Iterators.asEnumeration(mySet.iterator()); 
+1

Downvoter ...コメントする気に? – Adamski

170

java.util.Collections.enumeration(set)

Javadocは

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

+8

わかりました。私の答えは簡潔ですが、それは本当に言われている必要があるからです。 :)このメソッドはJDKにあり、ポスターが求めるものを正確に*行います。私はそれが最後にランクされるのは不思議です。 –

+1

有効なJava Item 47:ライブラリを知り、使用する – Ray

関連する問題