2012-03-06 9 views
4

私は課題で答える必要がある次の質問を理解しようとしています。それは無限のイテレータを求めています。彼らはどこで役に立つのだろうか?私は次のようにイテレータがコレクションを横断するために使用されていると思った:itrは、コレクションの末尾に達すると無限イテレータとは何ですか?なぜそれを使用するのですか?

Iterator itr = ArrayList.iterator(); 
while (itr.hasNext()) 
{ 
    System.out.println(itr.next()); 
} 

、それは限り、他の操作は反復の途中で行われていないされてなければならないため、行われています。なぜ無限のイテレータを気にするのですか?

+2

http://stackoverflow.com/questions/2622591/is -an-infinite-iterator-bad-design これはあなたの質問に答えます。 – Nik

+1

ああ、「無限イテレーター」の解釈がここではどういう意味なのか分かりません。ケースがオープンエンド範囲で反復する必要がある場合は、@ NikunjChauhanが正しいです。 Googleコレクションライブラリのように、コレクションの無限イテレータを意味する場合は、PHPや他の言語がたくさんあります。 –

答えて

6

無限の反復子は、終わりの要素に当たったときに巻き戻す点を除いて、上記のコードと全く同じです。

たぶん、この例では、それが便利になるかもしれない方法を説明するのに役立ちます:

Let l = [1,2,3,4,5,6,7,8] 

int i = 0; 
InfiniteIterator itr = l.infiniteIterator(); 
while(itr.hasNext()) { 
    if(i % 2 == 0) { 
     itr.remove(); 
    } 
    i++; 
} 

各反復でlの状態:

[1,2,3,4,5,6,7,8] # i = 0, e = 1 
[2,3,4,5,6,7,8] # i = 1, e = 2 
[2,3,4,5,6,7,8] # i = 2, e = 3 
[2,4,5,6,7,8] # i = 3, e = 4 
[2,4,5,6,7,8] # i = 4, e = 5 
[2,4,6,7,8] # i = 5, e = 6 
[2,4,6,7,8] # i = 6, e = 7 
[2,4,6,8] # i = 7, e = 8 
[2,4,6,8] # i = 8, e = 2 
[4,6,8] # i = 9, e = 4 
[4,6,8] # i = 10, e = 6 
[4,8] # i = 11, e = 8 
[4,8] # i = 12, e = 4 
[8] # i = 13, e = 8 
[8] # i = 14, e = 8 
[] # while loop exits 
+0

良い例です。 – AHungerArtist

関連する問題