本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/cartoon-blog/post/java/for与while时间的对比
相关文章:JAVA遍历机制的性能的比较
前言
索引随机访问数组相信是很常见的操作.
但是昨天在做leetcode的Reverse String时,发现了很奇怪的现象,具体如下图
当时我也觉得不可思议,怎么快了那么多,所以今天复盘一下。
正文
注:这篇文章只涉及原始数组的索引遍历,不涉及包装数据结构以及foreach
测试代码
- for
1 | private static void textFor(){ |
- while
1 | private static void textWhile(){ |
结果
1 | for use:35ms |
所用时间可能不一样,但是大概比例应该跟我的差不多
有点意外的是,while比for竟然要少一倍(大概)的时间,颠覆了我之前的认知。
结果分析
虽然我没有debug代码,但是我猜测是循环执行语句的多少差别。
for中,执行顺序是
- 判断循环变量是否越界
- 执行打印语句
- 循环变量自增
while中,执行顺序是
- 判断循环变量是否越界
- 执行打印语句,循环变量自增
与for相比,while所执行的语句量少掉1/3,所以我觉得这就是原因。(如果有更好的原因可以评论或者发起Issue)
后话
生命不息,技术不止。
很多时候我也为了代码量的减少不理会运行时间的差异,这次吸收教训,之后在实际开发会更加注意时间。