2016-04-23 25 views
0

イテレータを最初の要素にリセットする方法を教えてください。Javaでイテレータをリセットするには?

以下、私はSigmaイテレータを持っています。 whileループが完了したら、イテレータを最初の要素にリセットするにはどうすればよいですか?

Iterator it = Sigma.iterator(); 

while(it.hasNext()){ 
    letter= (String) it.next(); 
    System.out.println(letter); 
} 
+0

私はあなたがすべきではないと思います。リセットするには、基本となるデータ構造から新しいイテレータを取得するだけです。 'Iterator'はインタフェースであり、' hasNext'、 'next'、' remove'の3つのメソッドしか提供していません。 –

+0

ねえ、元のデータ構造から新しいIteratorをリクエストすることで本当に問題は解決していないのですが、この場合の問題から脱しているだけです。最後にデータ構造が変更されたイテレータ –

+0

とOP、なぜIteratorをリセットする必要がありますか?再びそれを反復するには? 1つのループで何をしたいのですか、なぜ2つのループに分割するのですか? –

答えて

0

イテレータではあまり作業していませんが、イテレータを元の状態に設定することができます。

Iterator it = Sigma.iterator(); 

while(it.hasNext()){ 
    letter= (String) it.next(); 
    System.out.println(letter); 
} 

it = Sigma.iterator(); 
+2

これは、Iteratorを元の状態に設定していないため、シグマの値が変更されていないのに、すでに変更されている場合、シグマから新しいイテレータを要求していますか? (新しい値がSigmaに追加または削除された場合)、異なる値を持つ新しいIteratorが得られます。 –

+0

@LaVloZMerrillそれは非常に良い点です。私は唯一の解決策は、最初にシグマのディープコピーを作成し、それを反復に使用することだと思います。 –

+0

@RayondKellyこの問題には多くの解決策があります。イテレータを受け入れるリセット可能なイテレータを作成できます。このリセット可能なイテレータは、まず、指定されたイテレータを繰り返し実行し、各オブジェクトの反復を内部配列にコピーしてから、最初の(非効率な方法)、別の簡単な方法は、基本的なデータ構造が変更されないことを保証します。コレクションの場合は、Collections.unmodifiableXXXメソッドでクラスを修飾することによってこの振る舞いを強制することができます。 ) –

1

リセットする必要はありません。コレクションは巻き戻しが必要なカセットテープのようなものではありません。単に古いイテレータを破棄することができます。

Sigma.iterator()を再度呼び出すたびに、新しいイテレータが返されます。イテレータは、コレクションの開始時に反復を開始します。