首页 > 解决方案 > 在对更经常为空的对象执行 for 循环之前检查 ArrayList 是否为空是否更高效

问题描述

我设置了一个javax.xml.bind.ValidationEventHandler在解组 xml 文档时侦听 xml 验证错误的程序。

是否真的需要检查Listof errors isEmpty()

还是我应该删除它并只使用for循环?

我不确定for循环是否比简单的if语句更昂贵。

T instance = (T) unmarshaller.unmarshal(..);
        
if (!eventHandler.getErrors().isEmpty()) {
  for (XSDValidationEventHandler.Error error : eventHandler.getErrors()) {
    // extract error, and log it
  }
}

XSDValidationEventHandler.java,自定义ValidationEventHandler实现:

public class XSDValidationEventHandler implements javax.xml.bind.ValidationEventHandler {

  private List<Error> errors = new ArrayList<Error>();

  @Override
  public boolean handleEvent(ValidationEvent event) {
    final Error error = new Error(event.getLocator().getLineNumber(), event.getMessage());
    errors.add(error);
    return true;
  }

  ..

  public class Error {

    private int lineNumber;
    private String message;
    public Error(int lineNumber, String message) {
      this.lineNumber = lineNumber;
      this.message = message;
    }
  }
}

标签: javaperformancefor-loopif-statement

解决方案


在该特定场景中您不需要它,因为如果为空,增强的 for 循环将不会做任何事情。

对于其他情况,可能需要它,但我认为这是非常过早的优化,检查布尔值是真还是假几乎可以忽略不计。


推荐阅读