ホームページ  >  記事  >  Java  >  Java のイテレータと for ループの長所と短所の比較

Java のイテレータと for ループの長所と短所の比較

WBOY
WBOY転載
2023-04-22 14:28:091983ブラウズ

1. 概念的な理解

for ループ: これは反復をサポートする一般的な構造であり、最も効果的で柔軟なループ構造です

Iterator: コレクションの iterator() メソッドを通じて取得されるため、コレクションに依存して存在すると言えます。

Foreach: ソースを読み取ることによってコード Iterable インターフェイスも見つかりました。これには Iterator オブジェクトを生成する iterator() メソッドが含まれており、Iterator オブジェクトはシーケンス内を移動するために foreach によって使用されます。 Iterable インターフェイスを実装する任意のオブジェクトに使用できます。

2. 効率の例

ArrayList での効率の比較:

        List<Integer> integers = Lists.newArrayList();
        for(int i=0;i<100000;i++){
            integers.add(i);
        }
 
        long start1 = System.currentTimeMillis();
        for(int count =0 ;count<10;count++){
            for(int i=0;i<integers.size();i++){
                int j=integers.get(i);
            }
        }
        System.out.println(String.format("for循环100次时间:%s ms",System.currentTimeMillis()-start1));
 
        long start2 = System.currentTimeMillis();
        for(int count =0 ;count<10;count++) {
            for (Integer i : integers) {
               int j = i;
            }
        }
        System.out.println(String.format("foreach循环100次时间:%s ms",System.currentTimeMillis()-start2));
 
        long start3 = System.currentTimeMillis();
        for(int count =0 ;count<10;count++) {
            Iterator<Integer> iterator = integers.iterator();
            while(iterator.hasNext()){
                int j=iterator.next();
            }
        }
        System.out.println(String.format("迭代器循环100次时间:%s ms",System.currentTimeMillis()-start3));

結果:

for循环100次时间:15 ms
foreach循环100次时间:25 ms
迭代器循环100次时间:20 ms

以下の 3 つの効率ArrayList はほぼ同じです。ArrayList は配列を通じて実装されるため、for ループが最適です。インデックスを通じて配列を位置決めする時間計算量は O(1) で、1 回で位置を特定できるため、効率は次のようになります。すごく高い。

概要: for ループを使用すると、連続して保存されたレコードへのアクセスが容易になり、foreach とイテレータを使用すると、リンクされたストレージへのアクセスが容易になります。

以上がJava のイテレータと for ループの長所と短所の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。