Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 增强的for循环空检查优化_Java_For Loop - Fatal编程技术网

Java 增强的for循环空检查优化

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

我知道使用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);
}
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())。