2

違いはおそらくごくわずかであるか、存在しませんが、どちらがより効率的で、その理由は何ですか?

int nItems = param.getItemList().size();
for (...) {
    if (nitems == 1) doSomething();
}

また

for (...) {
    if (param.getItemList().size() == 1) doSomething();
}  
4

4 に答える 4

8

理論的には、最初のほうが高速になります (プロファイリングしましたか? すべきです!)。これは、頻繁に使用されるメソッド呼び出しをループの外に引き出すためです。ただし、十分な時間があれば、JIT コンパイラーはメソッド呼び出しを最適化/インライン化して、パフォーマンスの点で両方のソリューションを区別できないようにする可能性があります。

このようなマイクロマイクロ最適化は努力する価値がありません。より明確で理解しやすいソリューションを目指したほうがよいでしょう。どの私見がたまたま最初のものですか。

于 2012-06-13T20:15:25.120 に答える
1

ループ外でメソッド呼び出しを行う方が効率的です。時にはそれが問題になることさえあります。2 番目のアプローチがより効率的である可能性がある 1 つの状況は、forループの条件によってループが完全にスキップされる場合です。

于 2012-06-13T20:14:53.923 に答える
0

最初の方法は、メソッドを何度も呼び出す必要がないため、より効率的です。ただし、両方ともgetItemList()アクセサーsize()のように見えるため、違いはごくわずかです。

于 2012-06-13T20:14:58.540 に答える
0

最初のもの。ループの反復ごとに 2 つの呼び出しを行う必要がないためです。

于 2012-06-13T20:15:59.083 に答える