Java 增强的for循环空检查优化
我知道使用java时,人们不应该为这样的事情而烦恼,但我无法抗拒,哪一个更快Java 增强的for循环空检查优化,java,for-loop,Java,For Loop,我知道使用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(Int
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);
}
ArrayList keke=new ArrayList();
ArrayList kuku=新的ArrayList();
如果(!keke.isEmpty()){
for(整数编号:keke){
系统输出打印项数(num);
}
}
//或者只是:
for(整数编号:kuku){
系统输出打印项数(num);
}
增强型for循环在开始执行任何操作之前执行空检查,对吗?所以使用封闭if(空)是完全没有用的?就像写:
for(Iterator<Integer> itr = kuku.iterator(); itr.hasNext();) {
...
}
for(迭代器itr=kuku.Iterator();itr.hasNext();){
...
}
如您所见,检查它是否为空是多余的,因为hasNext
将为false
,并且循环将不会执行
增强型for循环在开始执行任何操作之前执行空检查,对吗
不,我没想到会这样。我希望它只创建迭代器,而迭代器不会找到任何东西。无论如何,这就是所描述的:
增强型for语句相当于以下形式的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}
循环体永远不会执行。是的,它可能会创建一个无关的对象(迭代器),但在99.99%的情况下,我认为这不会对性能造成重大影响。
(如前所述,iterator()
方法可能会返回一个单例空迭代器以避免出现这种情况…)
如果您有证据表明,在您的特定应用程序中,当集合为空时,这会非常频繁地发生,并且所有额外的迭代器都会导致问题,那么进行微优化是公平的。但在现实环境中获得具体的性能数据之前,我甚至不会考虑这样做。是的,这是多余的。迭代器甚至可能不需要任何成本;根据迭代的集合实现,它可能会返回一个共享实例(Collections.emptyIterator())。