1

for loop と iterate の違いを教えてください。for/iterate はいつ使用する必要がありますか?

元:-

for(int i=0;i<arrayList.size();i++)
{
System.out.println(arrayList.get(i));
}


// using iterator
Iterator animalItr = animalList.iterator();

    while(animalItr.hasNext()) {
      String animalObj = (String)animalItr.next();
      System.out.println(animalObj);
}
4

3 に答える 3

4

イテレータを介したループは、インデックスを介したループよりも一般的です。イテレータを使用して、任意のコレクションを反復処理できます。対照的に、位置インデックスはシーケンスコンテナの技術的な詳細です。これを特定したい唯一の理由は、コンテナのシーケンシャルな性質が問題に固有であり、アルゴリズムの数値位置を知る必要がある場合です。

ただし、それ以外の場合、および一般的には、イテレータスタイルを選択する必要があります。これは、より一般的であり、コードがより均一になるためです。コードのさまざまな部分でさまざまなコンテナーが使用される場合があります(または、後でコンテナーを変更したい場合もあります)が、詳細に応じてスタイルを変えるのではなく、すべてを同じ方法で記述すると、反復がすぐに認識されます。コンテナ。

とはいえfor、コンテナ全体を(挿入/削除を介して)変更することなく、コンテナ内の各要素のみを操作する場合は、範囲ベースのループを使用することをお勧めします。あなたが言うときfor (String s : arrayList) { /*...*/ }、あなたはコンテナの名前やループの本体にあるイテレータの名前を言う必要さえありません!これを念頭に置いて、イテレータ(またはインデックス)ループは、現在の要素を消去するなどしてコンテナを変更する必要があるとループ内で決定した場合、またはコンテナ内の要素の位置が関連している場合に備えて予約する必要があります。

于 2012-09-08T11:45:10.180 に答える
0

オブジェクトに関してはIterable、個人的にfor-eachループを使用します。

for(Type t : iterableObject) {
 //body
}
于 2012-09-08T11:46:00.507 に答える
0

イテレータを使用してコレクションを反復処理することは、コレクションをトラバースする最も安全で最速の方法です。

ここでの ArrayList のような、配列に基づくコレクションの場合、違いはないかもしれません。

Iterator を使用する最大の理由の 1 つは、ConcurrentModificationExceptionを発生させずにコレクションを安全に変更できることです。

于 2012-09-08T11:54:14.523 に答える