本文首發於cartoon的博客
轉載請註明出處:https://cartoonyu.github.io/cartoon-blog/post/java/for%E4%B8%8Ewhile%E6%97%B6%E9%97%B4%E7%9A%84%E5%AF%B9%E6%AF%94/java
相關文章:JAVA遍歷機制的性能的比較git
索引隨機訪問數組相信是很常見的操做.github
可是昨天在作leetcode的Reverse String時,發現了很奇怪的現象,具體以下圖數組
當時我也以爲難以想象,怎麼快了那麼多,因此今天覆盤一下。數據結構
注:這篇文章只涉及原始數組的索引遍歷,不涉及包裝數據結構以及foreachpost
private static void textFor(){ int[] data=new int[1000]; int i=0; for(;i<1000;i++){ data[i]=i; } i=0; long start=System.currentTimeMillis(); for(;i<1000;i++){ System.out.print(data[i]+" "); } long end=System.currentTimeMillis(); System.out.println(); System.out.println("for use:"+(end-start)+"ms"); }
private static void textWhile(){ int[] data=new int[1000]; int i=0; for(;i<1000;i++){ data[i]=i; } i=0; long start=System.currentTimeMillis(); while(i<1000){ System.out.print(data[i++]+" "); } long end=System.currentTimeMillis(); System.out.println(); System.out.println("while use:"+(end-start)+"ms"); }
for use:35ms while use:15ms for use:14ms while use:6ms for use:14ms while use:8ms for use:20ms while use:5ms
所用時間可能不同,可是大概比例應該跟個人差很少性能
有點意外的是,while比for居然要少一倍(大概)的時間,顛覆了我以前的認知。測試
雖然我沒有debug代碼,可是我猜想是循環執行語句的多少差異。spa
for中,執行順序是debug
while中,執行順序是
與for相比,while所執行的語句量少掉1/3,因此我以爲這就是緣由。(若是有更好的緣由能夠評論或者發起Issue)
生命不息,技術不止。
不少時候我也爲了代碼量的減小不理會運行時間的差別,此次吸取教訓,以後在實際開發會更加註意時間。