1

これで最初に Iterator を使用し、すべてがうまくいきました。

ListIterator<Client> it = people.listIterator();      
while(it.hasNext()){
  Client c = (Client)it.next();
  System.out.println(c.getValeur());
}
System.out.println("Doing some operations on my values");

しかし、私が自分の値に対してそれらの操作を行ったとき

for (Client client : people) {
  int i = client.getValeur();
  i += 10000;
  client.setValeur(i);
}            

同じイテレータを使用しましたが、うまくいきませんでした

while(it.hasNext()){
  Client c = (Client) it.next();
  System.out.println(c.getValeur());
}

iterator のインデックスを再度開始する必要がありますか?

4

5 に答える 5

1

whileそのため、を処理するループを使用することはまったく推奨されませんIterator

なんで?使用時にスコープが区切られていないため、while発生したようなトラブルが発生する可能性があります。

このパターンを使用することをお勧めします。

for(Iterator it = people.listIterator(); it.hasNext();){
   Client c = (Client)it.next();
   System.out.println(c.getValeur());
}
//can't access it right here (outside the loop) any more

このようにすると、イテレータ (それ自体がジョブを終了し、リセットすることはできません) に再び到達することはできなくなります。

要約すると、このパターンでは、新しいインスタンスを作成Iteratorしてコレクションを再度ループする必要があり、これがその方法です。

于 2013-05-13T13:28:36.513 に答える
0

イテレータは 1 回限りです。反復の終わりに達すると、最初から回復することはありません。

代わりに、問題空間の構造だけから、同じ反復子内ですべての操作を一度に実行できない理由はありません。

int i = 0;
ListIterator<Client> it = people.listIterator();      
while(it.hasNext()){
    Client c = it.next();
    System.out.println(c.getValeur());
    i = client.getValeur();
    i += 10000;
    client.setValeur(i);
}
System.out.println("Doing some operations on my values");
于 2013-05-13T13:34:01.737 に答える