2012-12-13 11 views
5

मेरी कोड में पाश का उपयोग करना,) के लिए-प्रत्येक जावा

for(City city : country.getCities()){ 
    // do some operations 
} 

country.getCities (का उपयोग करना महंगा है? क्या JVM प्रत्येक कॉल के लिए स्टैकट्रैक बनाए रखेगा ..?

List<City> cityList = country.getCities(); 
for(City city : cityList){ 
    // do some operations 
} 

उपयोग करने का सबसे अच्छा तरीका क्या है?

उत्तर

9

नहीं, यह पाश:

for(City city : country.getCities()) 

केवल country.getCities()एक बार कॉल करेंगे, और फिर इस पर पुनरावृति। यह लूप के प्रत्येक पुनरावृत्ति के लिए इसे कॉल नहीं करता है। आपके मामले में यह करने के लिए बराबर है:

for (Iterator<City> iterator = country.getCities().iterator(); 
    iterator.hasNext();) { 
    City city = iterator.next(); 
    // do some operations 
} 

वहाँ अपने दूसरे टुकड़ा प्रति के रूप में यह फिर से लिखने में कोई लाभ नहीं है। अधिक जानकारी के लिए

section 14.14.2 of the JLS देखें।

+0

एक लाभ है, एक स्पष्ट इटरेटर के साथ लंबे संस्करण को लिखने से आप इसे iterator.remove() कर सकते हैं जो आप छोटे संस्करण – portforwardpodcast

+0

@portforwardpodcast के साथ नहीं कर सकते: निश्चित रूप से, लेकिन ऐसा लगता है कि 'के लिए' 'लूप और 'प्राप्त करें' क्योंकि तब आपको अनुक्रमणिका मिल गई है। वास्तव में यहां प्रदान किए गए कोड के संदर्भ में, कोई लाभ नहीं है। –

3

दोनों मामलों में getCities() केवल एक बार कहा जाता है।

डिफ़ॉल्ट अस्वीकरण: हमेशा के रूप में आपको कभी भी प्रदर्शन के बारे में चिंता करने की आवश्यकता नहीं होती है, क्योंकि संकलक किसी व्यक्ति से बेहतर होता है।

1

ये समकक्ष हैं। getCities() केवल को पर निष्पादित किया जाएगा। (यदि आप उस विधि में System.out.println() चिपकते हैं तो आपको यह देखना चाहिए)।

ध्यान दें कि यह सिर्फ नहीं प्रदर्शन के कारणों के लिए getCities() कई बार फोन नहीं होगा, बल्कि इसलिए भी कि वहाँ कोई गारंटी नहीं कि यह एक ही संग्रह के लिए हर बार (यह सहज ज्ञान युक्त है कि यह देता है एक ही संग्रह हो सकता है वापसी होगी, लेकिन अनिवार्य नहीं)

मैं एकजुटता के लिए अपना पहला उदाहरण पसंद करूंगा।

0

दोनों समान हैं, कोई अंतर नहीं है। और country.getCities() लूप में एक बार बुलाया जाएगा।

मुझे लगता है कि पहले एक बेहतर है क्योंकि कोई अतिरिक्त संदर्भ नहीं है।

0

JVM कोड को अनुकूलित करेगा जब इसे country.getCities() विधि को एक बार कॉल करने के लिए संकलित किया जाएगा।

आपको अपना कोड लिखना चाहिए जिस तरह से आप और/या आपकी टीम सबसे ज्यादा पठनीय है।

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