在多夫布尔卡的Java性能和可扩展性:第1卷,笔者提到,遍历一个ArrayList
与作为Java的ArrayList的for循环优化
for (int i = 0; i < vector.size(); i++) {
// do something that does not modify vector size...
}
一些诸如其实是因为一个小的优化问题的vector.size()
常数计算,因此暗示一些诸如
int size = vector.size();
for (int i = 0; i < size; i++) {
// do something that does not modify vector size...
}
实际上会更有效。由于该书是在2000年编写的,作者正在使用Sun 1.2.2 JDK。
这种情况对于较新的JDK是否仍然适用?或者,Java编译现在足够聪明,可以消除这些低效率,尽管它们可能有多小。编辑:我不担心在我的代码中这些微小的优化;我不担心在我的代码中这些微小的优化;我不担心。我只是对JDK的发展感到好奇。
除非您可以证明重复调用'size()'是代码中的瓶颈,否则不要浪费时间去担心这种微优化。无论如何,这种优化在某些条件下才是安全的(即当你处于循环中时,没有其他线程可以改变'vector'的大小)。 –
考虑使用'for-each'循环,而不用担心'List <>'的内部。在java 8中,'List#forEach(...)'将会更加隐藏它。 – bradimus
但是,“循环中不做某件事,除非你绝对必须在循环中执行”的基本规则仍然适用。无论技术如何发展,在循环中减少计算是件好事。 –