Java ने कलेक्शन में संग्रहीत डेटा को एक-एक करके पार करने के लिए ये दो इंटरफेस प्रदान किए हैं। इटरेटर और लिस्ट इटरेटर का आंतरिक कार्यान्वयन उन्हें अलग करता है लेकिन दोनों इटरेटर्स का मुख्य एजेंडा समान है।
Iterator और ListIterator के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।
| क्रमांक | मुख्य बिंदु | Iterator | ListIterator |
|---|---|---|---|
| 1 | लागू | Iterator का उपयोग कलेक्शन के प्रकार की परवाह किए बिना किसी भी कलेक्शन को पार करने के लिए किया जा सकता है। | ListIterator का उपयोग केवल List कलेक्शन के कार्यान्वित क्लासेस जैसे ArrayList, LinkedList आदि को पार करने के लिए किया जा सकता है। |
| 2 | कॉलिंग | जैसा कि उल्लेख किया गया है, Iterator का उपयोग Set, List, Queue, Deque जैसे सभी कलेक्शन इम्प्लीमेंटेड इंटरफेस में एलिमेंट्स को गिनने के लिए किया जाना चाहिए और Map इंटरफेस के सभी इम्प्लीमेंटेड क्लासेस में भी। Iterator ऑब्जेक्ट को Collection इंटरफेस के iterator() मेथड को कॉल करके बनाया जा सकता है। | दूसरी ओर, ListIterator का उपयोग तब किया जाना चाहिए जब हम List के एलिमेंट्स को गिनना चाहते हैं। ListIterator का ऑब्जेक्ट List इंटरफेस में मौजूद listIterator() मेथड को कॉल करके बनाया जा सकता है। |
| 3 | डेटा ट्रैवर्सल | इटरेटर के मामले में डेटा ट्रैवर्सल केवल एक दिशा में संभव है क्योंकि Iterator केवल फॉरवर्ड दिशा में ट्रैवर्स कर सकता है। | ListIterator फॉरवर्ड और बैकवर्ड दोनों दिशाओं में ट्रैवर्स कर सकता है जिससे डेटा ट्रैवर्सल दोनों दिशाओं में संभव होता है। |
| 4 | डिलीशन | इटरेटर के मामले में एलिमेंट का डिलीशन अनुमत नहीं है। | ListIterator लिस्ट कलेक्शन में एलिमेंट को रिप्लेस कर सकता है। |
| 5 | एडिशन | इटरेटर के मामले में एलिमेंट का एडिशन अनुमत नहीं है क्योंकि यह ConcurrentModificationException फेंकता है। | ListIterator लिस्ट कलेक्शन में किसी भी समय आसानी से एलिमेंट जोड़ सकता है। |
| 6 | मॉडिफिकेशन | इटरेटर के मामले में एलिमेंट का मॉडिफिकेशन अनुमत नहीं है क्योंकि यह ConcurrentModificationException फेंकता है। | ListIterator लिस्ट कलेक्शन में किसी भी समय set() मेथड कॉल करके आसानी से एलिमेंट को मॉडिफाई कर सकता है। |
| 7 | एलिमेंट का इंडेक्स | इटरेटर का उपयोग करते समय कलेक्शन में पार किए गए एलिमेंट का इंडेक्स प्राप्त नहीं किया जा सकता। | ListIterator में nextIndex() और previousIndex() जैसे मेथड्स होते हैं जो ट्रैवर्सल के दौरान किसी भी समय एलिमेंट्स के इंडेक्स प्राप्त करने के लिए होते हैं। |
Iterator बनाम ListIterator का उदाहरण
JavaTester.java
import java.io.*; import java.util.*; public class JavaTester { public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); //Iterator Iterator itr = list.iterator(); System.out.println("Iterator traversal:"); while (itr.hasNext()) System.out.print(itr.next() + " "); System.out.println(); // ListIterator ListIterator i = list.listIterator(); System.out.println("ListIterator Forward traversal:"); while (i.hasNext()){ System.out.print(i.next() + " "); System.out.println(); System.out.println("ListIterator Backward traversal : "); } while (i.hasPrevious()){ System.out.print(i.previous() + " "); System.out.println(); } } }आउटपुट
Iterator traversal: 1 2 3 4 5 ListIterator Forward traversal: 1 ListIterator Backward traversal : 2 ListIterator Backward traversal : 3 ListIterator Backward traversal : 4 ListIterator Backward traversal : 5 ListIterator Backward traversal : 5 4 3 2 1