Iterator और Listiterator के बीच अंतर?


138
Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

हम Iteratorएक Setया एक Listया एक का पता लगाने के लिए उपयोग कर सकते हैं Map। लेकिन ListIteratorकेवल एक का उपयोग करने के लिए इस्तेमाल किया जा सकता है List, यह एक को पीछे नहीं कर सकता है Set। क्यों?

मुझे पता है कि मुख्य अंतर यह है कि पुनरावृत्ति के साथ हम केवल एक दिशा में यात्रा कर सकते हैं लेकिन ListIteratorहम दोनों दिशाओं की यात्रा कर सकते हैं। क्या कोई अन्य मतभेद हैं? और ListIteratorओवर का कोई फायदा Iterator?


पीटर्स जवाब के अलावा मैं तुम्हें एक सोच में सभी अच्छा उदाहरण के साथ iterators के बारे में जावा में अध्याय पढ़ सलाह देते हैं
चींटी

जवाबों:


150

ListIterator के लिए Javadoc में अंतर सूचीबद्ध हैं

आप ऐसा कर सकते हैं

  • पीछे की ओर चलना
  • किसी भी बिंदु पर पुनरावृति प्राप्त करें।
  • किसी भी बिंदु पर एक नया मान जोड़ें।
  • उस बिंदु पर एक नया मान सेट करें।

68
और यही कारण है कि आप ऐसा नहीं कर सकते हैं कि एक Setसरल है: "वर्तमान बिंदु" नहीं है: तत्वों का कोई सूचकांक नहीं है और कोई उपयोगी तरीका नहीं है कि आप "एक" के बाद "पहले" या "एक तत्व" जोड़ सकते हैं।
जोकिम सोउर

@ पेटर लारेई किसी भी बिंदु पर सूचकांक प्राप्त करते हैं - क्या यह पिछले तरीके () और नेक्स्टइंडेक्स () के तरीकों के बारे में है ?
gstackoverflow

2
@gstackoverflow check java.util.ist # listIterator (int)
किलोनिट

4
@kilonet किसी भी बिंदु पर सूचकांक प्राप्त करने के बजाय , भ्रम की स्थिति से बचने के लिए इसे " किसी भी बिंदु पर पुनरावृत्ति प्राप्त करना" जैसे संकेत दिया जाना चाहिए?
शैलेश प्रतापवार 17

39

दो अंतर हैं:

  1. हम सेट और सूची को पार करने के लिए Iterator का उपयोग कर सकते हैं और वस्तुओं के मानचित्र प्रकार को भी। जबकि एक ListIterator का उपयोग सूची-प्रकार की वस्तुओं के लिए किया जा सकता है, लेकिन सेट-प्रकार की वस्तुओं के लिए नहीं।

    अर्थात्, हम सेट और सूची का उपयोग करके एक Iterator ऑब्जेक्ट प्राप्त कर सकते हैं, यहां देखें:

    Iterator का उपयोग करके हम संग्रह ऑब्जेक्ट से तत्वों को केवल आगे की दिशा में पुनः प्राप्त कर सकते हैं।

    Iterator में विधियाँ:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. लेकिन हमें ListIterator ऑब्जेक्ट केवल सूची इंटरफ़ेस से मिलता है, यहां देखें:

    जहां एक सूचीकर्ता के रूप में आप दोनों दिशाओं (आगे और पीछे दोनों) में पार करने की अनुमति देता है। तो इसके दो और तरीके हैं hasPrevious()और previous()Iterator की तुलना में अन्य। इसके अलावा, हम अगले या पिछले तत्वों की अनुक्रमणिका प्राप्त कर सकते हैं (उपयोग nextIndex() और previousIndex()क्रमशः)

    सूची में विधियाँ:

    1. hasNext ()
    2. आगे()
    3. पिछला()
    4. hasPrevious ()
    5. हटाना()
    6. nextIndex ()
    7. previousIndex ()
    ListIterator listiterator = List.listIterator();

    यानी, हम सेट इंटरफ़ेस से लिस्टआईटर ऑब्जेक्ट प्राप्त नहीं कर सकते।

संदर्भ: - Iterator और ListIterator में क्या अंतर है?


39
ऐसा लग रहा है कि यह काफी हद तक kirankumarjava.blogspot.com/2013/06/ से चिपकाया गया है । आपको हमेशा मूल लेखक को स्वीकार करना चाहिए।
कैमरून स्किनर

25

Iterator ListIterator का सुपर क्लास है।

यहाँ उनके बीच अंतर हैं:

  1. साथ iteratorआप केवल आगे बढ़ सकते हैं, लेकिन साथ ListIteratorआप भी backword स्थानांतरित कर सकते हैं तत्वों को पढ़ने के दौरान।
  2. साथ ListIteratorआप जबकि traversing किसी भी बिंदु है, जो साथ संभव नहीं है पर सूचकांक प्राप्त कर सकते हैं iteratorरों।
  3. साथ iteratorआप केवल अगले उपलब्ध है या नहीं तत्व के लिए जाँच कर सकते हैं, लेकिन में listiteratorआप पिछले और अगले तत्व देख सकते हैं।
  4. साथ listiteratorआप समय के किसी भी बिंदु पर नए तत्व जोड़ सकते हैं, जबकि traversing। के साथ संभव नहीं है iterator
  5. साथ listiteratorआप एक तत्व है, जबकि traversing, जो साथ संभव नहीं है संशोधित कर सकते हैं iterator

Iterator देखो और महसूस:

 public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove(); //optional-->use only once with next(), 
                         dont use it when u use for:each
    }

ListIterator देखो और महसूस:

public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove(); //optional
    void set(E e); //optional
    void add(E e); //optional
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.