关于使用for循环
有人喜欢使用for作类似while的循环:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
评论:这是一种风格,有一部分人使用,我个人觉得不如while来得直观。
究竟是++i,还是i++
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
以前我使用i++的写法,后来,看到一些优秀的代码中,大多使用++i,我就改用++i了。为什么使用++i,看到过一些理由,但觉得那些理由,不值一提。
使用i, j, k作多层循环
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
使用i, j, k做多层循环时,很容易犯错误,如上述代码中的注释缩写的那样。我参加的代码评审(Code Review)中,或者开发过程中,经常有同事遇到这种BUG。我也曾经吃过亏,每次编写i, j, k多层for循环时,就会提醒自己,小心,别犯错误!
使用for的习惯,除了++i和i++的写法不同外,还有和if、while等语句一样的不同写法,如下:
第一种写法
a、关键字for后面有空格
b、二元表达式左右有空格
c、每个大括号,单独占一行
d、else关键字单独占一行
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
第二种写法:
a、关键字if后面有空格
b、二元表达式左右有空格
c、大括号放在上一句的右边
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
需要优化是,可能你也会采用这种写法:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
如果for循环中,不会添加或者删除list的元素,使用这种方式优化,可能得到一丁点(可能不值一提)的性能提升。
需要从list中删除元素时,可能你会使用反序的遍历。如下:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
如果list的实现是ArrayList,反序遍历可能比正序删除的性能更高一些。
此外,for还有一些其他的使用方式,如:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)