কম্পিউটার টিউটোরিয়াল

জাভাতে Iterator এবং Enumeration-এর পার্থক্য

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-এक्सটেন্ড করে, দ্বিমুখী ট্রাভার্সাল, ইনডেক্স বেসড অ্যাক্সেস
  1. জাভাতে Exception এবং Error-এর পার্থক্য

  2. জাভাতে Serialization এবং Externalization-এর পার্থক্য

  3. জাভাতে ArrayList এবং HashSet-এর পার্থক্য

  4. জাভাতে Iterator এবং ListIterator-এর পার্থক্য