ホームページ >Java >&#&チュートリアル >For-each ループとイテレータ: コレクションのトラバーサルにはどちらが効率的ですか?

For-each ループとイテレータ: コレクションのトラバーサルにはどちらが効率的ですか?

DDD
DDDオリジナル
2024-11-25 15:24:101001ブラウズ

  For-each Loop or Iterator: Which is More Efficient for Collection Traversal?

拡張 for ループまたはイテレーター: ループ効率の評価

質問:

コレクションをナビゲートするとき、最も効果的なアプローチ: for-each ループまたはiterator?

コード スニペット:

For-eachループ:

List<Integer> a = new ArrayList<>();
for (Integer integer : a) {
  integer.toString();
}

反復子:

List<Integer> a = new ArrayList<>();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
  Integer integer = (Integer) iterator.next();
  integer.toString();
}

評価:

1.コレクション値の読み取り:

単にコレクションを走査して値にアクセスする場合、for-each ループは内部的にイテレータを利用するため、イテレータと for-each ループは同等の効率を持ちます。

2. C スタイルのループとイテレータ:

イテレータや for-each ループとは対照的に、get(i) を介して要素にアクセスする従来の「C スタイル」ループはパフォーマンス上の欠点を示す可能性があります。 Get(i) は、リンク リストなどの特定のデータ構造に対して O(n) の複雑性を持ち、ループ全体の時間計算量は O(n2) となります。

3.イテレータの効率:

イテレータは next() の時間計算量 O(1) を保証し、ループ O(n) をレンダリングします。

4.バイトコードの比較:

for-each ループとイテレータの両方に対して生成されたバイトコードを調べると、それらは事実上区別できず、本質的なパフォーマンスの違いがないことがわかります。

結論:

  • いずれかを選択してくださいコレクションのみを反復処理する場合は、for-each ループまたはイテレータを使用します。
  • 効率が最優先でない限り、簡潔さと読みやすさのために for-each ループを優先します。
  • 潜在的なパフォーマンス上の欠点に注意してください。 get(i).
を含む特定のシナリオにおける従来の C スタイルのループ

以上がFor-each ループとイテレータ: コレクションのトラバーサルにはどちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。