Я обычно пишу такой код:
private List<Foo> fooList = new ArrayList<Foo>();
public Foo findFoo(FooAttr attr) {
for(Foo foo : fooList) {
if (foo.getAttr().equals(attr)) {
return foo;
}
}
}
Однако, предполагая, что я правильно защищаюсь от нулевого ввода, я мог бы также выразить цикл следующим образом:
for(Foo foo : fooList) {
if (attr.equals(foo.getAttr()) {
return foo;
}
}
Мне интересно, имеет ли одна из вышеперечисленных форм преимущество в производительности по сравнению с другой. Я хорошо знаю об опасностях преждевременной оптимизации, но в этом случае я думаю, что код в любом случае одинаково разборчив, поэтому я ищу причину, чтобы предпочесть одну форму другой, чтобы я мог выстроить свои привычки кодирования, чтобы одобрить эту форму. Я думаю, что при достаточно большом списке даже небольшое преимущество в производительности может занять значительное количество времени.
В частности, мне интересно, может ли вторая форма быть более производительной, потому что метод equals()
вызывается неоднократно для одного и того же объекта, а не для разных объектов? Может быть, прогноз отрасли является фактором?