2013-09-01 4 views
5

मैं सूची पुनरावृत्ति का अभ्यास कर रहा हूं तो मैं अटक गया। मेरा सवाल है, इन दो तरीकों से अलग-अलग परिणाम क्यों देते हैं।इन दो सूची Iterators अलग तरीके से क्यों व्यवहार करते हैं?

पहला कोड एक अनंत लूप प्रिंट करता है। जबकि दूसरा, सूचकांक में अगली स्ट्रिंग को प्रिंट करता है।

मैं जावा के लिए नया हूं, यह मेरी पहली भाषा भी है।

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    while (l1.iterator().hasNext()) { 


     System.out.println(l1.iterator().next()); 
     ; 
    } 
    } 

वी.एस.

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    Iterator<String> rator = l1.iterator(); 

    while (rator.hasNext()) { 
     System.out.println(rator.next()); 
    } 
} 

उत्तर

6

l1.iterator(हमेशा एक नई इटरेटर उत्पन्न करता है। कोड के पहले भाग में आप एक नया इटरेटर बना रहे हैं, इसे छोड़कर, इसे पुनर्निर्माण कर रहे हैं, और इसे फिर से हटा रहे हैं। चूंकि इटेटर को अंत तक पहुंचने का मौका नहीं मिलता है, इसलिए आप कभी भी लूप से बाहर नहीं निकलेंगे।

+1

तो मूल रूप से .इटरेटर हर बार विधि निष्पादित होने पर एक नया इटरेटर होता है? –

+0

@ टिनले हाँ, यह है। – hexafraction

0

पहले मामले में आप लूप में स्थिति की जांच करते समय हर बार Iterator (जो पहले तत्व के साथ शुरू होता है) बनाते हैं। और फिर आप उनमें से अधिक println (प्रति लूप बनाए गए 2 पुनरावर्तक) में बनाते हैं। कार्यक्रम अंतहीन रूप से पहला तत्व ("yo") प्रदर्शित करता है।

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