java - 在对更经常为空的对象执行 for 循环之前检查 ArrayList 是否为空是否更高效
问题描述
我设置了一个javax.xml.bind.ValidationEventHandler
在解组 xml 文档时侦听 xml 验证错误的程序。
是否真的需要检查List
of 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;
}
}
}
解决方案
在该特定场景中您不需要它,因为如果为空,增强的 for 循环将不会做任何事情。
对于其他情况,可能需要它,但我认为这是非常过早的优化,检查布尔值是真还是假几乎可以忽略不计。
推荐阅读
- discord.js - 对 forEach 循环感到困惑
- javascript - 如何更改我的画布色轮,使其边缘像 CSS 版本一样平滑?
- javascript - 有很多容器时如何在内部 v-tooltip 上关闭外部 v-tooltip
- javascript - 无法发布 HTML 表单数据和重定向
- javascript - 反应
没有得到更新或改变其状态 - sequelize.js - Sequelize - hasMany 缓慢地获取具有许多关系的一个
- python - 为什么要在语言中使用复制功能?
- dotnetnuke - 2sxc 暂存和实时版本未呈现
- python - 从维基百科中获取属于一个主题的文章的正确命题
- reactjs - 盖茨比:通过道具传递图像