我知道用java一个人不应该打扰这样的事情,但我无法抗拒,哪个更快?:
ArrayList <Integer> keke = new ArrayList();
ArrayList <Integer> kuku = new ArrayList();
if(!keke.isEmpty()){
for(Integer num : keke){
System.out.println(num);
}
}
//or just:
for(Integer num : kuku){
System.out.println(num);
}
增强的for循环在开始做任何事情之前进行空检查?所以使用封闭if(空)是完全无用的?
答案 0 :(得分:5)
增强的for循环在开始做任何事情之前进行空检查?
不,我不希望这样。我希望它只是创建迭代器,然后找不到任何东西。无论如何,JLS 14.14.2所描述的是:
增强的for语句相当于表单的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) { {VariableModifier} TargetType Identifier = (TargetType) #i.next(); Statement }
永远不会执行循环体。是的,它可能会创建一个无关的对象(迭代器),但在99.99%的情况下,我预计不会出现重要的性能损失。
(如上所述,iterator()
方法可能会返回单例空迭代器以避免这种情况......)
如果你的特定应用程序中有证据,那么当集合为空时会非常频繁地触发,并且所有额外的迭代器都会导致问题,然后他们对微观优化是公平的。但是,在你在现实背景下掌握具体的表现数据之前,我甚至不会想到这样做。
答案 1 :(得分:3)
就像写作:
for(Iterator<Integer> itr = kuku.iterator(); itr.hasNext();) {
...
}
正如您所看到的,检查它是否为空是多余的,因为hasNext
将为false
并且循环将不会被执行。