イテレータの反復回数をカウンタとして使用しようとしていますが、それを行うことの効果が不思議でした。イテレータは反復処理中のコレクションを変更できますか? Java
private int length(Iterator<?> it) {
int i = 0;
while(it.hasNext()) {
it.next();
i++;
}
return i;
}
これはうまくいきますが、イテレータが背後で何をする可能性があるか心配です。おそらく、私はスタックを繰り返しているので、スタックからアイテムをポップしたり、優先キューを使用している場合は優先順位を変更したりします。
javadocツールがイテレータについてはこれを言う:
次
Eは、次の()
繰り返し処理で次の要素を返し 。
戻り値:
反復
の次の要素例外:
はNoSuchElementExceptionを - の繰り返しがそれ以上の要素を持っていない場合
私は変更されません。この未知のコレクションを反復処理保証が表示されませんそれ。私は非現実的なケースを考えていますか、それとも懸念していますか?より良い方法がありますか?
誰かがあなたに 'Iterator'を渡している場合、彼らは副作用が何であれ、' next() 'を呼び出すことを期待しています。 –