Iterator और Enumeration दोनों कलेक्शन से एलिमेंट्स को ट्रैवर्स और एक्सेस करने के लिए कर्सर हैं। वे दोनों कलेक्शन फ्रेमवर्क से संबंधित हैं। Enumeration JDK 1.0 में जोड़ा गया था और Iterator JDK 1.2 वर्जन में कलेक्शन फ्रेमवर्क में जोड़ा गया।
Enumeration कलेक्शन में स्ट्रक्चरल चेंज नहीं कर सकता क्योंकि इसके पास कलेक्शन में एलिमेंट्स का रीड-ओनली एक्सेस होता है। इसके निम्नलिखित मेथड्स हैं:
- hasMoreElements()
- nextElement()
दूसरी ओर, एक Iterator कलेक्शन में एलिमेंट को पढ़ और हटा सकता है। इसके निम्नलिखित मेथड्स हैं:
- hasNext()
- next()
- remove()
| क्र.सं. | मुख्य बिंदु | Iterator | Enumeration |
|---|---|---|---|
| 1 | बुनियादी | Iterator में, हम ट्रैवर्स करते समय एलिमेंट को पढ़ और हटा सकते हैं | Enumeration का उपयोग करके, हम ट्रैवर्स करते समय केवल एलिमेंट पढ़ सकते हैं |
| 2 | एक्सेस | इसे कलेक्शन फ्रेमवर्क की किसी भी क्लास के साथ उपयोग किया जा सकता है | इसे केवल कलेक्शन फ्रेमवर्क की लिगेसी क्लासेज जैसे Vector और Hashtable के साथ उपयोग किया जा सकता है |
| 3 | फेल-फास्ट और फेल-सेफ | कलेक्शन में कोई भी परिवर्तन, जैसे थ्रेड के इटरेट करते समय एलिमेंट हटाने पर, यह ConcurrentModificationException थ्रो करता है | Enumeration फेल-सेफ प्रकृति का है। यह ConcurrentModificationException नहीं थ्रो करता |
| 4 | सीमा | केवल फॉरवर्ड डायरेक्शन में इटरेट करना संभव है | Enumeration का उपयोग करके रिमूव ऑपरेशन नहीं किए जा सकते |
| 5 | मेथड्स | इसमें निम्नलिखित मेथड्स हैं: • hasNext() • next() • remove() |
इसमें निम्नलिखित मेथड्स हैं: • hasMoreElements() • nextElement() |
Enumeration का उदाहरण
class EnumerationExample {
public static void main(String args[]) {
List<String> list = new ArrayList<>(Arrays.asList("Apple", "Cat", "Dog", "Rat"));
Vector<String> v = new Vector<>(list);
delete(v, "Dog");
}
private static void delete(Vector<String> v, String name) {
Enumeration<String> e = v.elements();
while (e.hasMoreElements()) {
String s = e.nextElement();
if (s.equals(name)) {
v.remove(name); // ध्यान: Enumeration के दौरान रिमूव करना अनसेफ है
}
}
// नाम प्रदर्शित करें
System.out.println("The names are:");
e = v.elements();
while (e.hasMoreElements()) {
System.out.println(e.nextElement());
}
}
}
Iterator का उदाहरण
class IteratorExample {
public static void main(String args[]) {
List<String> list = new ArrayList<>(Arrays.asList("Apple", "Cat", "Dog", "Rat"));
Vector<String> v = new Vector<>(list);
delete(v, "Dog");
}
private static void delete(Vector<String> v, String name) {
Iterator<String> i = v.iterator();
while (i.hasNext()) {
String s = i.next();
if (s.equals(name)) {
i.remove(); // सुरक्षित रिमूवल
}
}
// नाम प्रदर्शित करें
System.out.println("The names are:");
i = v.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
महत्वपूर्ण नोट्स
- फेल-फास्ट: Iterator मूल कलेक्शन के साथ छेड़छाड़ का पता लगाता है और ConcurrentModificationException थ्रो करता है
- फेल-सेफ: Enumeration (और ConcurrentHashMap का इटरेटर) कलेक्शन की कॉपी पर काम करता है, इसलिए एक्सेप्शन नहीं थ्रो करता
- Java 8+: forEachRemaining(), stream() जैसे नए मेथड्स Iterator में उपलब्ध हैं
- ListIterator: Iterator का एक्सटेंशन जो बाईडायरेक्शनल ट्रैवर्सल और एलिमेंट मॉडिफिकेशन की अनुमति देता है