2009-08-31 23 views
26

अगर मैं जावा में ऐसा करता हूं:जावा: संग्रह "अभिव्यक्ति" में कितनी बार मूल्यांकन अभिव्यक्ति का मूल्यांकन किया जाता है

for(String s : myCollection.expensiveListGeneration()) 
{ 
     doSomething(); 
} 

महंगा है लिस्ट जेनरेशन() भिखारी पर या हर चक्र पुनरावृत्ति में केवल एक बार बुलाया जाता है?

क्या यह कार्यान्वयन निर्भर है?

+0

[जावा फोरच दक्षता] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/904582/java-foreach- क्षमता) –

उत्तर

33

क्योंकि यह एक पुनरावर्तक का उपयोग करने के बराबर है, यह संग्रह को कॉल करने के बराबर है। इटरेटर() विधि, और इसे एक बार कहा जाता है।

19

इसे एक बार लागू किया गया है, और कार्यान्वयन पर निर्भर नहीं है। प्रत्येक लूप के लिए Iterable इंटरफ़ेस पर आधारित है। यह सब कुछ शुरू में एक बार संग्रह की iterator() विधि को कॉल करता है, और उसके बाद उस इटरेटर के साथ काम करता है।

+0

आह, एक ही समय में उत्तर दिया :) – Chii

संबंधित मुद्दे