取代switch
關鍵字 switch 語句用於多條件判斷, switch 語句的功能類似於 if-else 語句,兩者效能也差不多。因此,不能說 switch 語句會降低系統的效能。但是,在絕大部分情況下,switch 語句還是有效能提升空間的。
來看下面的範例:
public static void main(String[] args) { long start = System.currentTimeMillis(); int re = 0; for (int i = 0;i<1000000;i++){ re = switchInt(i); System.out.println(re); } System.out.println(System.currentTimeMillis() - start+"毫秒");//17860 } public static int switchInt(int z){ int i = z%10+1; switch (i){ case 1:return 3; case 2:return 6; case 3:return 7; case 4:return 8; case 5:return 10; case 6:return 16; case 7:return 18; case 8:return 44; default:return -1; } }
就分支邏輯而言,這種 switch 模式的效能並不差。但如果換一種新的思路取代switch,實現相同的程式功能,效能就能有很大的提升空間。
public static void main(String[] args) { long start = System.currentTimeMillis(); int re = 0; int[] sw = new int[]{0,3,6,7,8,10,16,18,44}; for (int i = 0;i<1000000;i++){ re = arrayInt(sw,i); System.out.println(re); } System.out.println(System.currentTimeMillis() - start+"毫秒");//12590 } public static int arrayInt( int[] sw,int z){ int i = z%10+1; if (i>7 || i<1){ return -1; }else { return sw[i]; } }
以上程式碼使用全新的思路,使用一個連續的陣列取代了 switch 語句。因為對資料的隨機存取是非常快的,至少好於 switch 的分支判斷。透過實驗,使用switch的語句耗時17860ms,使用陣列的實作只耗時12590ms,提升了5s多。在軟體開發中,換個想法可能會取得更好的效果,例如使用陣列取代switch語句就是就是一個很好的例子。
以上是java如何替換switch的詳細內容。更多資訊請關注PHP中文網其他相關文章!