本文首发于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)
生命不息,技术不止。
不少时候我也为了代码量的减小不理会运行时间的差别,此次吸取教训,以后在实际开发会更加注意时间。