java:在"foreach"中计算的集合表达式的次数

fly*_*ire 29 java collections performance foreach

如果我在Java中这样做:

for(String s : myCollection.expensiveListGeneration())
{
      doSomething();
}
Run Code Online (Sandbox Code Playgroud)

是贵的ListGeneration()在开始或每个循环迭代中只调用一次?

它是依赖于实现的吗?

Chi*_*hii 41

因为它等同于使用迭代器,它相当于调用集合'.iterator()方法,它被调用一次.


Mic*_*rdt 25

它被调用一次,而不依赖于实现.for-each循环基于Iterable接口.它只是iterator()在开始时调用集合的方法,然后使用该迭代器.