2011-12-07 22 views
5

मैं एक सूची है:बनाम सूची इटरेटर सूची

1.

for(Object obj : myList) 
{ 
    // some code 
} 

2.

Iterator<Object> objIt = myList.iterator(); 
while(obj.hasNext()) { 
    Object obj = (Object)objIt.next(); 
    // some code 
} 
:

List<Object> myList = new ArrayList<Object>(); 

इस सूची से प्राप्त करने के लिए वहाँ दो तरीके हैं

मेरा प्रश्न यह है कि कौन सा मेमोरी कुशल है और तेजी से तेज़ होता है ?

+0

"इसे पाने के लिए" कहकर आप वास्तव में क्या मतलब रखते हैं? –

+1

http://stackoverflow.com/questions/2113216/which-is-more- कुशल-a-for-each-loop-or-an-iterator –

+0

प्रश्न पूछने से पहले कृपया खोज का उपयोग करें। स्टैक ओवरफ्लो पर कई प्रश्न पूछे जा चुके हैं और यहां जवाब दिया गया है। का डुप्लिकेट: http://stackoverflow.com/questions/2113216/which-is-more- कुशल-a-for-each-loop-or-an-iterator –

उत्तर

12

वे एक ही काम करते हैं - बढ़ाया for लूप लैंडहैंड संस्करण के लिए सिंटैक्टिक चीनी है (पुनरावृत्तियों के लिए; सरणी के लिए यह थोड़ा अलग है)। जब तक आपको इटरेटर को स्पष्ट रूप से आवश्यकता न हो (उदा। remove() पर कॉल करने के लिए) मैं पहले संस्करण का उपयोग करूंगा।

संकलक द्वारा किए गए सटीक परिवर्तन के अधिक विवरण के लिए section 14.14.2 of the Java Language Specification देखें।

+1

मैं इसी तरह का उत्तर देने वाला था। (धारा 14 को छोड़कर ... भाग।) गति के लिए +1। –

+0

Iterable इंटरफ़ेस (http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html) कहता है कि उन्नत लूप के लिए डिज़ाइन किया गया है। सिर्फ संदर्भ को इंगित करना चाहता था कि वे बिल्कुल वही हैं। – pimaster

2

पहले एक तुम क्या एक जो JDK 1.5+

में पेश किया गया था यह एक सूची के माध्यम से पुनरावृत्ति की अधिक सुविधाजनक तरीका है "पाश के लिए बढ़ाया" कहते हैं। इसके अलावा, यदि आप इसका उपयोग कर रहे हैं तो आपको स्पष्ट कास्टिंग करने की आवश्यकता नहीं है।

प्रदर्शन परिप्रेक्ष्य से, मुझे नहीं लगता कि दोनों के बीच बहुत अंतर नहीं है।

1

लूप के लिए उन्नत केवल इसके अंदर इटरेटर का उपयोग किया जाता है। तो दोनों एक ही हैं।

1

पहला एक और स्पष्ट है, लेकिन यदि आप सूची में जाकर तत्वों को हटाना चाहते हैं तो आपकी एकमात्र पसंद एक इटरेटर है।

2

इटरेटर: यह आप परिणाम जब जरूरत करने देता है और परिणाम में स्मृति

3

एक Iterator का उपयोग को परिभाषित करने class बाहर से के रूप में आप गलती से ओवरराइड नहीं कर सकते List करने के लिए एक बहुत सेवर पहुँच है हो जाता है नहीं है उदाहरण के लिए पूरे List। आप एक समय में केवल एक तत्व तक पहुंच सकते हैं: शीर्ष एक।

तो हमारे द्वारा उपयोग किए जाने वाले दिशानिर्देश केवल परिभाषा वर्ग के अंदर for each दृष्टिकोण का उपयोग करना है और जब भी सूची को किसी इटरेटर के बाहर से एक्सेस किया जाना आवश्यक है। यह class के अंदर किसी सदस्य को संशोधित करने के तर्क को रखने की अवधारणा को भी लागू करता है जिसमें यह शामिल है। बाहर की सभी जटिल परिचालनों को के अंदर public विधियों में लागू किया जाना है।

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