将循环分成更小的循环是否重要?
Does it matter if you divide loops into smaller loops?
如果你有一个包含 2 个主要部分的 for 循环,如下所示:
for (object o : objects){
doSomething(o);
doSomething2(o);
}
像这样将循环拆分为 2 个较小的循环会影响性能吗?
for (object o : objects){
doSomething(o);
}
for (object o : objects){
doSomething2(o);
}
从技术上讲, 是的,您最终不得不迭代两次。根据定义,除了可能的操作范围很窄之外,这将比迭代一次慢。您还必须分配迭代器对象两次而不是一次,等等。如果您要处理大量列表,我想两个循环也可能导致更多的内存分页。
在现实世界中?您必须有一个 非常 大列表,或者 非常 慢迭代器,这才重要。
主观上:如果你可以做任何一种方式(例如,操作的顺序无关紧要),我会做在写作方面最有意义的并阅读代码。对我来说,通常这将是一个循环,因为这样我就可以很清楚地看到每个对象发生了什么,但大概你有理由问。我不会担心性能,除非我知道我将要处理真正庞大的东西(数十万甚至数百万条目),或者我看到 现实世界的问题 我正在处理的代码。
如果你有一个包含 2 个主要部分的 for 循环,如下所示:
for (object o : objects){
doSomething(o);
doSomething2(o);
}
像这样将循环拆分为 2 个较小的循环会影响性能吗?
for (object o : objects){
doSomething(o);
}
for (object o : objects){
doSomething2(o);
}
从技术上讲, 是的,您最终不得不迭代两次。根据定义,除了可能的操作范围很窄之外,这将比迭代一次慢。您还必须分配迭代器对象两次而不是一次,等等。如果您要处理大量列表,我想两个循环也可能导致更多的内存分页。
在现实世界中?您必须有一个 非常 大列表,或者 非常 慢迭代器,这才重要。
主观上:如果你可以做任何一种方式(例如,操作的顺序无关紧要),我会做在写作方面最有意义的并阅读代码。对我来说,通常这将是一个循环,因为这样我就可以很清楚地看到每个对象发生了什么,但大概你有理由问。我不会担心性能,除非我知道我将要处理真正庞大的东西(数十万甚至数百万条目),或者我看到 现实世界的问题 我正在处理的代码。