জাভা ডেটা একে একে ট্রাভার্স করার জন্য এই দুটি ইন্টারফেস প্রদান করে। Iterator এবং ListIterator-এর ইন্টারনাল ইমপ্লিমেন্টেশন আলাদা হলেও প্রধান উদ্দেশ্য একই।
Iterator এবং ListIterator-এর মধ্যে গুরুত্বপূর্ণ পার্থক্যগুলো:
| ক্র. নং | কী | Iterator | ListIterator |
|---|---|---|---|
| ১ | প্রযোজ্য | Iterator যেকোনো কালেকশন ট্রাভার্স করতে পারে, টাইপ নির্বিশেষে। | ListIterator শুধু লিস্ট কালেকশন (ArrayList, LinkedList ইত্যাদি) ট্রাভার্স করতে পারে। |
| ২ | কলিং | Iterator সব কালেকশন ইমপ্লিমেন্টেড ইন্টারফেস (Set, List, Queue, Deque) এবং Map ইন্টারফেসের ইমপ্লিমেন্টেড ক্লাসে ব্যবহৃত হয়। Iterator অবজেক্ট Collection ইন্টারফেসের iterator() মেথড কল করে তৈরি হয়। | ListIterator তখন ব্যবহৃত হয় যখন লিস্টের এলিমেন্ট ট্রাভার্স করতে চাই। ListIterator অবজেক্ট List ইন্টারফেসের listIterator() মেথড কল করে তৈরি হয়। |
| ৩ | ডেটা ট্রাভার্স | Iterator শুধু ফরওয়ার্ড ডিরেকশনে ট্রাভার্স করতে পারে। | ListIterator ফরওয়ার্ড এবং ব্যাকওয়ার্ড উভয় ডিরেকশনে ট্রাভার্স করতে পারে। |
| ৪ | ডিলিশন | Iterator-এ এলিমেন্ট ডিলিশন অনুমত নেই। | ListIterator লিস্ট কালেকশনে এলিমেন্ট রিপ্লেস করতে পারে। |
| ৫ | অ্যাডিশন | Iterator-এ এলিমেন্ট অ্যাডশন অনুমত নেই, ConcurrentModificationException থ্রো করে। | ListIterator লিস্ট কালেকশনে যেকোনো সময় এলিমেন্ট অ্যাড করতে পারে। |
| ৬ | মডিফিকেশন | Iterator-এ মডিফিকেশন অনুমত নেই, ConcurrentModificationException থ্রো করে। | ListIterator লিস্ট কালেকশনে যেকোনো সময় set() মেথড দিয়ে মডিফাই করতে পারে। |
| ৭ | এলিমেন্টের ইন্ডেক্স | Iterator ব্যবহার করে ট্রাভার্স করা এলিমেন্টের ইন্ডেক্স পাওয়া যায় না। | ListIterator-এ nextIndex() এবং previousIndex() মেথড আছে ইন্ডেক্স পেতে। |
Iterator vs 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