質問:
コレクションをナビゲートするとき、最も効果的なアプローチ: 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 ループとイテレータ: コレクションのトラバーサルにはどちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。