这个问题已经在这里有了答案: > for loop optimization 15个
定义“ for-each循环”,最好使用以下约定:
情况1
for (String s : xxx.getList())
或这个:
情况二
List<String> list = xxx.getList();
for (String s : list)
在情况1中,方法getList()被调用了多少次?
每个循环一次还是在开始时只有一次?
谢谢
解决方法:
永远不要花时间思考这种优化.
1)如果您可以想到似乎更有效但功能上等效的一行更改,则可以肯定的是,编写JIT编译器的人也想到了这一点.它们将编译为相同的字节码.
2)除最关键的循环外,可读性比性能重要得多.仅当您打算将列表用于for循环范围之外的其他内容,并且for循环更改列表时,才应使用情况二.在这种情况下,携带更改过的列表在语义上比重复调用xxx.getList()更清晰,因为程序员看着该函数的一部分可能不会意识到您已经在同一函数中进一步编辑了xxx中的列表.
3)在这种类型的编程中,几乎没有硬性规定,关于“可读性”的表示意见也有所不同.
请记住,编译语言与解释语言是不同的,并且您编写的代码不是处理器的文字手册.您可以想象的几乎所有小优化,以及您无法想象的许多优化,都将由编译器进行.而且,编译器可以优化许多高复杂度的标准编程模式,当您自己尝试“优化”时,只会导致编译器“迷惑”,而不是意识到这是一种标准模式,并且无法优化何时应该优化.
========================
在注释中,slim指出了使用情况2的另一种情况-如果您有多个for循环,并且getList是一个昂贵的操作,该操作根据请求构造列表,而不仅仅是返回现有对象.
标签:list,loops,for-loop,java 来源: https://codeday.me/bug/20191029/1960104.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。