ListIterator হল Iterator ইন্টারফেসের একটি উপ-ইন্টারফেস যা List ইন্টারফেসের সঙ্গে কাজ করে এবং bi-directional iteration সমর্থন করে, অর্থাৎ এটি একটি List এর উপাদানগুলোকে forward এবং backward উভয় দিক দিয়ে ইটারেট (পুনঃপ্রবাহ) করতে পারে। সাধারণ Iterator শুধুমাত্র একটি দিক দিয়ে (ফরওয়ার্ড) ইটারেট করতে সক্ষম, কিন্তু ListIterator দুটি দিক দিয়ে চলতে পারে, যেমন আপনি একটি List এর প্রথম থেকে শেষ পর্যন্ত যেতে পারেন, অথবা শেষ থেকে প্রথম পর্যন্ত যেতে পারেন।
ListIterator শুধু List ইন্টারফেসের সাথে কাজ করে এবং এর বেশ কিছু অতিরিক্ত মেথড রয়েছে যা সাধারণ Iterator ইন্টারফেসে নেই। ListIterator সাধারণত ArrayList, LinkedList এবং অন্যান্য List ক্লাসের জন্য ব্যবহৃত হয়।
ListIterator Interface-এর প্রধান মেথড:
hasNext():- পরবর্তী উপাদান আছে কিনা তা পরীক্ষা করে।
next():- পরবর্তী উপাদান ফেরত দেয় এবং ইটারেটরকে পরবর্তী উপাদানে এগিয়ে নিয়ে যায়।
hasPrevious():- পূর্ববর্তী উপাদান আছে কিনা তা পরীক্ষা করে।
previous():- পূর্ববর্তী উপাদান ফেরত দেয় এবং ইটারেটরকে পূর্ববর্তী উপাদানে ফিরিয়ে নিয়ে যায়।
nextIndex():- পরবর্তী উপাদানের ইনডেক্স ফেরত দেয়।
previousIndex():- পূর্ববর্তী উপাদানের ইনডেক্স ফেরত দেয়।
set(E e):- বর্তমান উপাদানটি পরিবর্তন করে এবং নতুন মান সেট করে।
add(E e):- তালিকার বর্তমান অবস্থানে একটি নতুন উপাদান যোগ করে।
Bi-directional Iteration এর মাধ্যমে ListIterator ব্যবহার করা
এখানে একটি উদাহরণ দেয়া হলো যা ListIterator ব্যবহার করে একটি List এর উপাদানগুলোর ওপর bi-directional iteration দেখাবে। প্রথমে তালিকার উপাদানগুলির ওপর forward ইটারেশন হবে, তারপর backward ইটারেশন হবে।
উদাহরণ: Bi-directional Iteration with ListIterator
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorExample {
public static void main(String[] args) {
// একটি ArrayList তৈরি করা
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("JavaScript");
// ListIterator এর মাধ্যমে forward iteration (আগে থেকে পিছনে)
ListIterator<String> iterator = list.listIterator();
System.out.println("Forward Iteration:");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// ListIterator এর মাধ্যমে backward iteration (পেছনে থেকে আগে)
System.out.println("\nBackward Iteration:");
while (iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
Output:
Forward Iteration:
Java
Python
C++
JavaScript
Backward Iteration:
JavaScript
C++
Python
Java
ব্যাখ্যা:
- Forward Iteration:
- প্রথমে
ListIteratorব্যবহার করে তালিকার প্রথম থেকে শেষ পর্যন্ত উপাদানগুলির ওপর ইটারেশন করা হয়েছে।iterator.next()মেথডটি পরবর্তী উপাদানটি ফেরত দেয় এবং একে একে তালিকার সমস্ত উপাদান প্রদর্শিত হয়।
- প্রথমে
- Backward Iteration:
- এরপর,
ListIteratorএরhasPrevious()এবংprevious()মেথড ব্যবহার করে উপাদানগুলো পেছন থেকে সামনে ইটারেট করা হয়েছে।previous()মেথডটি পূর্ববর্তী উপাদানটি ফেরত দেয় এবং ইটারেটরকে পূর্ববর্তী উপাদানে নিয়ে যায়।
- এরপর,
ListIterator এর সুবিধা:
- Bi-directional Iteration:
ListIteratorশুধুমাত্রListক্লাসের জন্য কাজ করে এবং এটি উপাদানগুলোকে forward এবং backward উভয় দিক দিয়ে ইটারেট করতে সক্ষম, যাIteratorএর জন্য সম্ভব নয়।
- Element Modification:
ListIteratorএর মাধ্যমে আপনিset()মেথড ব্যবহার করে তালিকার একটি উপাদান পরিবর্তন করতে পারেন। এটি একটি গুরুত্বপূর্ণ ফিচার, যা সাধারণIteratorদিয়ে সম্ভব নয়।
- Efficient Insertion:
ListIteratorএর মাধ্যমে আপনিadd()মেথড ব্যবহার করে তালিকার মধ্যে নতুন উপাদান যোগ করতে পারেন, যাIteratorতে করা সম্ভব নয়।
- Access Index:
ListIteratorএরnextIndex()এবংpreviousIndex()মেথড ব্যবহার করে আপনি বর্তমানে যে উপাদানে আছেন তার ইনডেক্স জানতে পারেন।
ListIterator এবং Iterator এর মধ্যে পার্থক্য:
| Feature | Iterator | ListIterator |
|---|---|---|
| Iteration Direction | Only forward iteration | Forward and backward iteration |
| Element Modification | Not allowed | Allows element modification using set() |
| Adding Elements | Not allowed | Allows adding elements using add() |
| Index Access | No | Allows accessing current index using nextIndex() and previousIndex() |
| Supported Collection | Can iterate over any Collection | Can iterate over List only |
ListIterator একটি শক্তিশালী ইন্টারফেস যা List কোলেকশনের উপাদানগুলোর ওপর bi-directional iteration করার জন্য ব্যবহৃত হয়। এটি শুধুমাত্র List ইন্টারফেসের বাস্তবায়নগুলির জন্য কাজ করে এবং forward এবং backward উভয় দিক থেকে উপাদান অ্যাক্সেস করার সুবিধা দেয়। এর মাধ্যমে আপনি উপাদান গুলি পরিবর্তন, যোগ এবং ইনডেক্স অ্যাক্সেস করতে পারবেন, যা সাধারণ Iterator দিয়ে সম্ভব নয়। ListIterator ব্যবহার করে আপনি একটি List এর সাথে আরও কার্যকরী এবং স্থিতিস্থাপকভাবে কাজ করতে পারেন।
Read more