摘要:結(jié)果分析雖然我沒有代碼,但是我猜測是循環(huán)執(zhí)行語句的多少差別。如果有更好的原因可以評論或者發(fā)起后話生命不息,技術(shù)不止。很多時候我也為了代碼量的減少不理會運行時間的差異,這次吸收教訓(xùn),之后在實際開發(fā)會更加注意時間。
????本文首發(fā)于cartoon的博客
????轉(zhuǎn)載請注明出處: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/
????相關(guān)文章:JAVA遍歷機制的性能的比較
前言索引隨機訪問數(shù)組相信是很常見的操作.
但是昨天在做leetcode的Reverse String時,發(fā)現(xiàn)了很奇怪的現(xiàn)象,具體如下圖
當(dāng)時我也覺得不可思議,怎么快了那么多,所以今天復(fù)盤一下。
正文注:這篇文章只涉及原始數(shù)組的索引遍歷,不涉及包裝數(shù)據(jù)結(jié)構(gòu)以及foreach
for
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"); }
while
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
所用時間可能不一樣,但是大概比例應(yīng)該跟我的差不多
有點意外的是,while比for竟然要少一倍(大概)的時間,顛覆了我之前的認(rèn)知。
雖然我沒有debug代碼,但是我猜測是循環(huán)執(zhí)行語句的多少差別。
for中,執(zhí)行順序是
判斷循環(huán)變量是否越界
執(zhí)行打印語句
循環(huán)變量自增
while中,執(zhí)行順序是
判斷循環(huán)變量是否越界
執(zhí)行打印語句,循環(huán)變量自增
與for相比,while所執(zhí)行的語句量少掉1/3,所以我覺得這就是原因。(如果有更好的原因可以評論或者發(fā)起Issue)
后話生命不息,技術(shù)不止。
很多時候我也為了代碼量的減少不理會運行時間的差異,這次吸收教訓(xùn),之后在實際開發(fā)會更加注意時間。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74982.html
摘要:中單線程多線程與多進(jìn)程的效率對比實驗多線程多進(jìn)程中多線程和多進(jìn)程的對比是運行在解釋器中的語言,查找資料知道,中有一個全局鎖,在使用多進(jìn)程的情況下,不能發(fā)揮多核的優(yōu)勢。 title: Python中單線程、多線程與多進(jìn)程的效率對比實驗date: 2016-09-30 07:05:47tags: [多線程,多進(jìn)程,Python]categories: [Python] meta: Pyt...
摘要:語句概況描述在代碼中,使用分號分隔的可以叫做是語句語句塊在代碼中,大括號表示語句塊語句塊中可以存在一條或多條語句語句的分類條件語句循環(huán)語句跳轉(zhuǎn)語句條件語句描述通過對條件表達(dá)式的計算結(jié)果進(jìn)行判斷,來決定要執(zhí)行的語句語句語法條件表達(dá)式語句塊當(dāng) 語句概況 描述 在JavaScript代碼中,使用分號(;)分隔的可以叫做是語句 語句塊 在JavaScript代碼中,大括號({})表示語句塊 ...
摘要:場景檢查數(shù)組中是否含有某個東西和是對立的案例案例是否包含為對象循環(huán)遍歷效率對比參考參考原生實現(xiàn)等方法其他參考 1 遍歷數(shù)組的方法 1-1、for / while 最普通的循環(huán) 效率最高 兼容ie6tips:for循環(huán)更適用于循環(huán)的開始和結(jié)束已知,循環(huán)次數(shù)固定的場合;while循環(huán)更適合于條件不確定的場合 1-2、for in 兼容ie6,效率最差(效率可看最下面的對比) for in...
摘要:由此,我嘗試著利用在前端進(jìn)行圖片主題色的提取。一主題色算法目前比較常用的主題色提取算法有最小差值法中位切分法八叉樹算法聚類色彩建模法等。 本文由云+社區(qū)發(fā)表 圖片主題色在圖片所占比例較大的頁面中,能夠配合圖片起到很好視覺效果,給人一種和諧、一致的感覺。同時也可用在圖像分類,搜索識別等方面。通常主題色的提取都是在后端完成的,前端將需要處理的圖片以鏈接或id的形式提供給后端,后端通過運行相...
摘要:由此,我嘗試著利用在前端進(jìn)行圖片主題色的提取。一主題色算法目前比較常用的主題色提取算法有最小差值法中位切分法八叉樹算法聚類色彩建模法等。 本文由云+社區(qū)發(fā)表 圖片主題色在圖片所占比例較大的頁面中,能夠配合圖片起到很好視覺效果,給人一種和諧、一致的感覺。同時也可用在圖像分類,搜索識別等方面。通常主題色的提取都是在后端完成的,前端將需要處理的圖片以鏈接或id的形式提供給后端,后端通過運行相...
閱讀 487·2019-08-30 15:44
閱讀 902·2019-08-30 10:55
閱讀 2735·2019-08-29 15:16
閱讀 934·2019-08-29 13:17
閱讀 2807·2019-08-26 13:27
閱讀 576·2019-08-26 11:53
閱讀 2125·2019-08-23 18:31
閱讀 1892·2019-08-23 18:23