-4

速度が非常に重要なコードのチャンクを最適化しようとしてintいますが、for ループがループしようとしている回数を保持し、それがゼロに等しい場合は for ループを実行しないことは、 forループを0回実行させるだけです。

速度の向上はごくわずかであることを認識しています。それは好奇心になり始めたばかりです。また、これは C++ または C と言う Java とは異なるでしょうか?

例:

size=0;
for (int i = 0;i<size;i++)
{
}

また

size=0;
if (size!=0)
{ 
    for (int i = 0;i<size;i++)
    {
    }
}

もちろん、実際のコードではサイズがゼロではないことがよくありますが、ゼロになった場合、どちらが速いでしょうか?

4

2 に答える 2

2

学術的に?はい、サイズが 0 ではないたびに、追加の比較が 1 回実行されるためです。

現実的に?いいえ。このような比較について話しているときは、特にJVM が機械語を作成し、プロセッサ上で直接実行された後、ナノ秒をカウントしています。

さて、どちらを使うべきか。おそらく最初のものです。時間の節約にはならず、より短く、よりクリーンです。さらに良いことに、Java には for-each ループ構造があるため、インデックスをまったく持つ必要はありません。

String[] strs = ... ;
for (String str : strs) {
    // Do something with str
}

配列の場合、これはインデックス付きの for ループにコンパイルされます。Collectionオブジェクトの場合:

Collection<String> strs = ... ;
for (String str : strs) {
    // Do something with str
}

Iteratorこれは、宣言を使用して for ループにコンパイルされます。

これらは、コンパイル後に同じものにコンパイルされ、明確であり、配列とコレクションの両方で同じであるため、インデックス自体が必要ない場合に最適なオプションです。

于 2012-10-14T21:57:27.530 に答える
0

あなたが言ったように、それほど大きな違いはありませんが、2番目のチェックにはもう1つチェックがあるため、最初のチェックに比べて2番目のチェックに時間がかかります。

于 2012-10-14T21:47:42.363 に答える