1. ホーム
  2. java

[解決済み] forループとfor-eachループの間に性能差はありますか?

2022-04-23 16:12:42

質問

次の2つのループの性能の違いがあるとすれば、それは何ですか?

for (Object o: objectArrayList) {
    o.DoSomething();
}

そして

for (int i=0; i<objectArrayList.size(); i++) {
    objectArrayList.get(i).DoSomething();
}

解決方法は?

の項目46から 効果的なJava by Joshua Bloch :

で導入されたfor-eachループは リリース1.5では、雑多なものを排除するために というエラーが発生する可能性があります。 イテレータやインデックス変数を隠蔽する 完全に その結果、このイディオムは は、コレクションと 配列になります。

// The preferred idiom for iterating over collections and arrays
for (Element e : elements) {
    doSomething(e);
}

コロン(:)があったら、次のように読みます。 "中" したがって、上のループは次のように読み取れます。 "for each element e in elements." 注意 パフォーマンス・ペナルティはありません。 を使用することで、たとえ 配列になります。むしろ 通常の を使用するため、状況によっては は、配列インデックスの限界値を計算します。 を一度だけ使用します。このようなことは て(項目45)、プログラマはそうしない。 を使うことがあります。