“ for”循环中的Java最佳实践.如何定义集合?

这个问题已经在这里有了答案:            >            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是一个昂贵的操作,该操作根据请求构造列表,而不仅仅是返回现有对象.

上一篇:在python中循环多个变量


下一篇:java-如何在一个循环中重新组合条件?