for in循环还是迭代器?

时间:2016-03-07 10:10:45

标签: java for-loop arraylist iterator

我在Netbeans工作,它一直建议我使用迭代器而不是for-in循环。上次我遇到它的时候是这个:

ON(candidatura.PRG_PAR = anagraficaEdificio.PRG_PAR, candidatura.PRG_CAN = anagraficaEdificio.PRG_CAN)

这与效率有关吗?通过我自己的逻辑,上面的例子比导入一个类更有效。

3 个答案:

答案 0 :(得分:1)

如下所示的for循环基本上是一个非常漂亮的迭代器,旨在迭代集合。

除非你正在做其他要求你删除元素的事情,能够向前移动next()或向后previous()通过列表,并且能够检查,否则它并不重要使用hasNext()

获取更多元素

TL:DR 如果您只想迭代forEach,最好使用Collection循环。否则,请使用迭代器。

答案 1 :(得分:1)

尝试使用for循环并在循环时删除一些元素:-)你会得到相当异常NewsDetailsViewController *detailsVc= [[NSBundle mainBundle] loadNibNamed:@"NewsDetailsViewController" owner:self options:nil][0]; 这就是为什么使用ConcurrentModificationException接口是安全的并且可以在这样的情况下使用情况。我假设NetBeans建议您使用Iterator

的可能原因

答案 2 :(得分:0)

增强的for语句是语法糖,可以更好地迭代Iterable。参考JLS

  

增强的for语句具有以下形式:

EnhancedForStatement:
     for ( FormalParameter : Expression ) Statement
     

...

     

增强的for语句相当于表单的基本for语句:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    VariableModifiersopt TargetType Identifier =
         (TargetType) #i.next();
    Statement
}

因此,编写增强的for语句比使用显式迭代器更有效,因为它是使用迭代器实现的。

似乎令人惊讶的是,Netbeans会建议您在问题中使用显式迭代器形式 - 而语言功能的存在并不一定意味着使用它是一个好主意,我可以& <39>看看在这种情况下使用它会带来什么好处。