Java SwitchとIf elseの使用効率の比較と分析
前言
私たちの実際の開発では、論理の方向を判断する文法がよく使われています.最もよく知られている論理判断はswitchとif elseの2つですが、それらの間にはいったいどれが優れているのでしょうか.一緒に実験をしましょう.実はこの1篇は私はそんなにくどくどしたくなくて、书く责任のある态度に基づいて、私はやはり惯例に従って前言あるいは导语を书いて、実は私はとても言いたいです:くどくどしないで、直接机に乗ってナノをテストして时间をかけましょう!!
一、if else
最終結果表示の実行:
二、switch
最終結果表示の実行:
比較するとifとswitchの運転効率は10倍程度異なることが分かった.何がこんなに大きな差をもたらしたのでしょうか.
三、原理分析 if ..elseが論理的に判断する場合、if文ごとに独立してロードする必要があり、判断を1回実行します.これが時間のかかるメカニズムの問題です. switch..caseは、1つの値に基づいて多重分岐し、1回だけ計算し、式の値を各caseの値と比較し、どのcase文ブロックを選択します.
四、まとめ switchはcaseが定数の場合しか処理できず,定数でない場合にはどうしようもない.例えばif(a>1&&a<100)は関係論理に属し,switch...caseでは処理できない. switchは定数選択分岐時にifよりのみ有効である.elseは効率的ですがif..Elseはより多くの場合に適用できますif..elseは比較的柔軟です.
私たちの実際の開発では、論理の方向を判断する文法がよく使われています.最もよく知られている論理判断はswitchとif elseの2つですが、それらの間にはいったいどれが優れているのでしょうか.一緒に実験をしましょう.実はこの1篇は私はそんなにくどくどしたくなくて、书く责任のある态度に基づいて、私はやはり惯例に従って前言あるいは导语を书いて、実は私はとても言いたいです:くどくどしないで、直接机に乗ってナノをテストして时间をかけましょう!!
一、if else
long t1 = System.nanoTime();
String aaa="";
if("1".equals(aaa)){
System.out.println(aaa);
} else if ("2".equals(aaa)) {
System.out.println(aaa);
} else if ("3".equals(aaa)) {
System.out.println(aaa);
} else if ("4".equals(aaa)) {
System.out.println(aaa);
} else if ("5".equals(aaa)) {
System.out.println(aaa);
} else if ("6".equals(aaa)) {
System.out.println(aaa);
} else if ("7".equals(aaa)) {
System.out.println(aaa);
} else if ("8".equals(aaa)) {
System.out.println(aaa);
} else if ("9".equals(aaa)) {
System.out.println(aaa);
} else if ("10".equals(aaa)) {
System.out.println(aaa);
} else if ("11".equals(aaa)) {
System.out.println(aaa);
} else if ("12".equals(aaa)) {
System.out.println(aaa);
} else if ("13".equals(aaa)) {
System.out.println(aaa);
} else if ("14".equals(aaa)) {
System.out.println(aaa);
} else {
System.out.println(aaa);
}
long t2 = System.nanoTime();
Log.d("aaa","if : " + (t2 - t1));
最終結果表示の実行:
D/aaa: if : 94739
二、switch
long t1 = System.nanoTime();
String aaa="";
switch (aaa) {
case "1":
System.out.println(aaa);
break;
case "2":
System.out.println(aaa);
break;
case "3":
System.out.println(aaa);
break;
case "4":
System.out.println(aaa);
break;
case "5":
System.out.println(aaa);
break;
case "6":
System.out.println(aaa);
break;
case "7":
System.out.println(aaa);
break;
case "8":
System.out.println(aaa);
break;
case "9":
System.out.println(aaa);
break;
case "10":
System.out.println(aaa);
break;
case "11":
System.out.println(aaa);
break;
case "12":
System.out.println(aaa);
break;
case "13":
System.out.println(aaa);
break;
case "14":
System.out.println(aaa);
break;
default:
System.out.println(aaa);
break;
}
long t2 = System.nanoTime();
Log.d("aaa","switch: " + (t2 - t1));
最終結果表示の実行:
D/aaa: switch: 8125
比較するとifとswitchの運転効率は10倍程度異なることが分かった.何がこんなに大きな差をもたらしたのでしょうか.
三、原理分析
四、まとめ