3

従来の for ループの代わりに for-each ループを使用する必要がありますか? whileループは有利ですか?

List<String> names = Arrays.asList("John", "Jeff", "Mary", "Elise");

//for-each loop
for(String name: names){
    log(name);
}

//traditional for-loop
for(int index=0; index < 10; ++index){
    log(names.get(index));
}

//Iterator while
Iterator<String> iter1 = names.iterator();
while (iter1.hasNext()) {
    log(iter1.next());
}

//Iterator for loop
for(Iterator<String> iter2 = names.iterator(); iter2.hasNext();){
    log(iter2.next());
}

使用するのに最適なフレーバーは何ですか?

4

6 に答える 6

2

同じです。しかし、場合によっては、他のものよりも有利な場合があります

ケース 1:

//for-each loop
for(String name: names){
    log(name);
}

好ましい :

  • コレクションを繰り返したいとき
  • 配列に対する追加または削除はありません。
  • 反復するアイテムのインデックスは不要

ケース 2:

//traditional for-loop
for(int index=0; index < 10; ++index){
    log(names.get(index));
}

好ましい :

  • コレクションを繰り返したいとき
  • 反復するアイテムのインデックスで作業する必要があります。そのため、現在使用しているインデックスの値を常に持っています。

ケース 3:

Iterator<String> iter1 = names.iterator();
while (iter1.hasNext()) {
    log(iter1.next());
}

//Iterator for loop
for(Iterator<String> iter2 = names.iterator(); iter2.hasNext();){
    log(iter2.next());
}

好ましい :

  • コレクションを繰り返したいとき
  • 追加または削除は、反復中に ||ly かかります。
于 2013-08-06T11:08:09.270 に答える
2

オプション 1 は、3 と 4 の単なる短縮バージョンです。それらのうち、#1 の方が読みやすく、読みやすいため、推奨されます。オプション 2 は、Iterator オブジェクトを作成しないため、マイクロパフォーマンスが優れている可能性がありますが、ArrayList のような RandomAccess リストを使用する場合のみです。

于 2013-08-06T11:09:10.147 に答える
1

foreachこのループ内のいくつかの要素を削除する場合は、ループを使用しないでください。forコレクションから要素を削除した後に反復子を減らすことができる場合は、代わりに従来のループを使用してください。

于 2013-08-06T11:08:05.437 に答える
0

for と foreach のパフォーマンスはわずかに異なります。それらはほぼ同じ速度です。ただし、foreach ループは、ローカル変数により多くのスタック スペースを使用します。

詳細については、こちらを参照してください。

http://forums.asp.net/t/1209455.aspx/1
于 2013-08-06T11:08:00.463 に答える
0

コンテナーが Iterable を実装しfor eachている限り、上記のようにインデックスは必要ありません。おそらく、ID の代わりに Objects id フィールドを使用するでしょう。

于 2013-08-06T11:08:09.167 に答える