Iterator এবং Enumeration উভয়ই কালেকশন থেকে এলিমেন্ট ট্রাভার্স এবং অ্যাক্সেস করার কার্সর। উভয়ই কালেকশন ফ্রেমওয়ার্কের অংশ। Enumeration JDK 1.0-এ, Iterator JDK 1.2-এ যোগ করা হয়েছিল।
Enumeration কালেকশনে স্ট্রাকচারাল পরিবর্তন করতে পারে না কারণ এর রিড-অনلی অ্যাক্সেস। এর মেথডগুলো: hasMoreElements(), nextElement()।
অন্যদিকে Iterator রিড এবং রিমুভ দুটোই করতে পারে। এর মেথডগুলো: hasNext(), next(), remove()।
Iterator এবং Enumeration-এর তুলনা
| ক্রমিক নং | বিষয় | Iterator | Enumeration |
|---|---|---|---|
| ১ | বেসিক | ট্রাভার্সের সময় রিড এবং রিমুভ করতে পারে | ট্রাভার্সের সময় শুধু রিড করতে পারে |
| ২ | অ্যাক্সেস | কালেকশন ফ্রেমওয়ার্কের যেকোনো ক্লাসের সাথে ব্যবহার করা যায় | লিগ্যাসি ক্লাসের সাথে ব্যবহার করা যায় (Vector, Hashtable) |
| ৩ | Fail-Fast / Fail-Safe | Fail-fast: ইটারেশন중에 কালেকশন পরিবর্তন হলে ConcurrentModificationException নিক্ষেপ করে | Fail-safe: ConcurrentModificationException নিক্ষেপ করে না |
| ৪ | লিমিটেশন | শুধু ফরওয়ার্ড ডাইরেকশনে ইটারেট করা যায় | রিমুভ অপারেশন করা যায় না |
| ৫ | মেথড | hasNext(), next(), remove() | hasMoreElements(), nextElement() |
Enumeration উদাহরণ
class EnumerationExample {
public static void main(String args[]) {
List<String> list = 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-এ রিমুভ করা যায় না, Vector-এ সরাসরি
}
}
// Display names
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 = 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(); // Iterator-এর রিমুভ মেথড ব্যবহার
}
}
// Display names
System.out.println("The names are:");
i = v.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
মূল নোট
- Iterator: আধুনিক, সব কালেকশনে ব্যবহারযোগ্য, ফেইল-ফাস্ট, রিমুভ সাপোর্ট
- Enumeration: লিগ্যাসি, শুধু Vector/Hashtable-এ, ফেইল-সেফ, রিমুভ নেই
- ListIterator: Iterator-এक्सটেন্ড করে, দ্বিমুখী ট্রাভার্সাল, ইনডেক্স বেসড অ্যাক্সেস