0

私は非常に基本的なJavaイテレータのシナリオを持っています...イテレータの動作を見つける際に以下の問題に直面しています

イテレータ logIterator は両方の while ループで同じ値を持つか、2 番目の while ループで終了して null になります。

Set logSet=transactionLogMap.entrySet();
Iterator logIterator=logSet.iterator();
BigDecimal tempRegId=null;

while (logIterator.hasNext()) {
    tempRegId=(BigDecimal)logIterator.next();
}

if (someBoolean) {
     while (logIterator.hasNext()) {
         callsomeMethod(logIterator.next());
     }
}
4

3 に答える 3

1

2回目のループ前に終わりますが、nullにはなりません。

それはちょうど戻っfalseてきますlogIterator.hasNext()

于 2012-07-23T15:58:45.630 に答える
1

それらは異なる値になります。2 番目のループは を返しますfalse

イテレータを使用すると、呼び出し元は、明確に定義されたセマンティクスを使用して、反復中に基になるコレクションから要素を削除できます。

于 2012-07-23T15:59:00.260 に答える
0

古いイテレータを再利用しているだけです。に戻るtruehasNext()、彼はそうし続けます。2 番目のループには入りません。

それとは別に、新しいfor構造の使い方を学びましょう

for(BigDecimal tempRegId : transactionLogMap.entrySet() {
}
于 2012-07-23T16:00:38.353 に答える