资讯专栏INFORMATION COLUMN

For与while时间的对比

lcodecorex / 1811人阅读

摘要:结果分析虽然我没有代码,但是我猜测是循环执行语句的多少差别。如果有更好的原因可以评论或者发起后话生命不息,技术不止。很多时候我也为了代码量的减少不理会运行时间的差异,这次吸收教训,之后在实际开发会更加注意时间。

    本文首发于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遍历机制的性能的比较

前言

索引随机访问数组相信是很常见的操作.

但是昨天在做leetcode的Reverse String时,发现了很奇怪的现象,具体如下图

当时我也觉得不可思议,怎么快了那么多,所以今天复盘一下。

正文

注:这篇文章只涉及原始数组的索引遍历,不涉及包装数据结构以及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

所用时间可能不一样,但是大概比例应该跟我的差不多

有点意外的是,while比for竟然要少一倍(大概)的时间,颠覆了我之前的认知。

结果分析

虽然我没有debug代码,但是我猜测是循环执行语句的多少差别。

for中,执行顺序是

判断循环变量是否越界

执行打印语句

循环变量自增

while中,执行顺序是

判断循环变量是否越界

执行打印语句,循环变量自增

与for相比,while所执行的语句量少掉1/3,所以我觉得这就是原因。(如果有更好的原因可以评论或者发起Issue)

后话

生命不息,技术不止。

很多时候我也为了代码量的减少不理会运行时间的差异,这次吸收教训,之后在实际开发会更加注意时间。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74982.html

相关文章

  • Python中单线程、多线程和多进程效率对比实验

    摘要:中单线程多线程与多进程的效率对比实验多线程多进程中多线程和多进程的对比是运行在解释器中的语言,查找资料知道,中有一个全局锁,在使用多进程的情况下,不能发挥多核的优势。 title: Python中单线程、多线程与多进程的效率对比实验date: 2016-09-30 07:05:47tags: [多线程,多进程,Python]categories: [Python] meta: Pyt...

    niceforbear 评论0 收藏0
  • JavaScript 之 核心语法 [ 语句 ]

    摘要:语句概况描述在代码中,使用分号分隔的可以叫做是语句语句块在代码中,大括号表示语句块语句块中可以存在一条或多条语句语句的分类条件语句循环语句跳转语句条件语句描述通过对条件表达式的计算结果进行判断,来决定要执行的语句语句语法条件表达式语句块当 语句概况 描述 在JavaScript代码中,使用分号(;)分隔的可以叫做是语句 语句块 在JavaScript代码中,大括号({})表示语句块 ...

    stormjun 评论0 收藏0
  • 数组常见遍历循环方法、数组循环遍历效率对比

    摘要:场景检查数组中是否含有某个东西和是对立的案例案例是否包含为对象循环遍历效率对比参考参考原生实现等方法其他参考 1 遍历数组的方法 1-1、for / while 最普通的循环 效率最高 兼容ie6tips:for循环更适用于循环的开始和结束已知,循环次数固定的场合;while循环更适合于条件不确定的场合 1-2、for in 兼容ie6,效率最差(效率可看最下面的对比) for in...

    xfee 评论0 收藏0
  • 如何对前端图片主题色进行提取?这篇文章详细告诉你

    摘要:由此,我尝试着利用在前端进行图片主题色的提取。一主题色算法目前比较常用的主题色提取算法有最小差值法中位切分法八叉树算法聚类色彩建模法等。 本文由云+社区发表 图片主题色在图片所占比例较大的页面中,能够配合图片起到很好视觉效果,给人一种和谐、一致的感觉。同时也可用在图像分类,搜索识别等方面。通常主题色的提取都是在后端完成的,前端将需要处理的图片以链接或id的形式提供给后端,后端通过运行相...

    jkyin 评论0 收藏0
  • 如何对前端图片主题色进行提取?这篇文章详细告诉你

    摘要:由此,我尝试着利用在前端进行图片主题色的提取。一主题色算法目前比较常用的主题色提取算法有最小差值法中位切分法八叉树算法聚类色彩建模法等。 本文由云+社区发表 图片主题色在图片所占比例较大的页面中,能够配合图片起到很好视觉效果,给人一种和谐、一致的感觉。同时也可用在图像分类,搜索识别等方面。通常主题色的提取都是在后端完成的,前端将需要处理的图片以链接或id的形式提供给后端,后端通过运行相...

    Neilyo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<