Deque (Double-ended Queue) হল Java Collections Framework এর একটি ইন্টারফেস, যা java.util প্যাকেজে উপলব্ধ। এটি Queue ইন্টারফেসের একটি উন্নত সংস্করণ এবং একটি double-ended queue এর বৈশিষ্ট্য সরবরাহ করে, যার মানে হলো আপনি queue এর উভয় প্রান্ত (front এবং back) থেকে উপাদান যুক্ত বা মুছে ফেলতে পারেন।
Deque এর প্রধান বৈশিষ্ট্য:
- Double-ended Queue: Deque এর মাধ্যমে আপনি queue এর প্রথম এবং শেষ থেকে ডেটা যোগ বা মুছে ফেলতে পারেন, যা সাধারণ Queue ইন্টারফেসের থেকে উন্নত বৈশিষ্ট্য।
- FIFO এবং LIFO সমর্থন করে: Deque একই সঙ্গে FIFO (First-In-First-Out) এবং LIFO (Last-In-First-Out) উভয় পদ্ধতিতে কাজ করতে পারে, যেমন stack এবং queue এর মতো।
- Efficient Operations: Deque এর উপর বিভিন্ন অপারেশন যেমন addFirst(), addLast(), removeFirst(), removeLast() দ্রুত সম্পাদন করা সম্ভব।
- No Blocking: Deque একাধিক উপাদান একই সঙ্গে ব্যবহারের জন্য নিরাপদ এবং কোন ব্লকিং অপারেশন নেই।
Deque Interface এর প্রধান ক্লাসসমূহ:
- ArrayDeque:
ArrayDequeহল একটি resizable array যা Deque ইন্টারফেসের একটি বাস্তবায়ন। এটিLinkedListএর তুলনায় কিছু ক্ষেত্রে দ্রুত হতে পারে, বিশেষ করে যখন আপনাকে queue এবং stack উভয় ধরনের অপারেশন করতে হয়।- এটি সাধারণত ব্যবহৃত হয় যখন FIFO বা LIFO অপারেশন করা প্রয়োজন এবং তার সাথে ডাবল এন্ডেড অপারেশন করা যায়।
- LinkedList:
LinkedListহল Deque ইন্টারফেসের আরেকটি বাস্তবায়ন। এটি একটি ডাবল লিঙ্কড লিস্ট ভিত্তিক ডেটা স্ট্রাকচার এবং queue এবং stack উভয় ধরনের কার্যাবলী সমর্থন করে।
Deque Interface এর প্রধান মেথডসমূহ:
Deque ইন্টারফেসে কিছু গুরুত্বপূর্ণ মেথড রয়েছে যা আপনি queue এর উভয় প্রান্তে অপারেশন করতে ব্যবহার করতে পারেন:
- addFirst(E e):
- একটি উপাদানকে Deque এর প্রথম প্রান্তে যোগ করে।
- addLast(E e):
- একটি উপাদানকে Deque এর শেষ প্রান্তে যোগ করে।
- removeFirst():
- Deque এর প্রথম প্রান্ত থেকে একটি উপাদান মুছে ফেলে।
- removeLast():
- Deque এর শেষ প্রান্ত থেকে একটি উপাদান মুছে ফেলে।
- getFirst():
- Deque এর প্রথম উপাদানটি ফেরত দেয় (এটি কোন উপাদান মুছে না ফেলে)।
- getLast():
- Deque এর শেষ উপাদানটি ফেরত দেয় (এটি কোন উপাদান মুছে না ফেলে)।
- offerFirst(E e):
- একটি উপাদানকে প্রথম প্রান্তে যুক্ত করার চেষ্টা করে এবং সফল হলে true ফেরত দেয়।
- offerLast(E e):
- একটি উপাদানকে শেষ প্রান্তে যুক্ত করার চেষ্টা করে এবং সফল হলে true ফেরত দেয়।
- pollFirst():
- Deque এর প্রথম উপাদানটি মুছে ফেলে এবং ফেরত দেয়, যদি Deque খালি না থাকে।
- pollLast():
- Deque এর শেষ উপাদানটি মুছে ফেলে এবং ফেরত দেয়, যদি Deque খালি না থাকে।
Deque ব্যবহার করার উদাহরণ:
1. ArrayDeque উদাহরণ:
import java.util.ArrayDeque;
import java.util.Deque;
public class ArrayDequeExample {
public static void main(String[] args) {
// Creating a Deque using ArrayDeque
Deque<String> deque = new ArrayDeque<>();
// Adding elements to the Deque
deque.addFirst("Apple");
deque.addLast("Banana");
deque.addFirst("Orange");
// Displaying the Deque
System.out.println("Deque: " + deque); // Output: [Orange, Apple, Banana]
// Removing elements from the Deque
System.out.println("Removed first: " + deque.removeFirst()); // Output: Orange
System.out.println("Removed last: " + deque.removeLast()); // Output: Banana
// Displaying the Deque after removal
System.out.println("Deque after removal: " + deque); // Output: [Apple]
}
}
Output:
Deque: [Orange, Apple, Banana]
Removed first: Orange
Removed last: Banana
Deque after removal: [Apple]
ব্যাখ্যা:
addFirst("Apple")এবংaddLast("Banana")মেথড ব্যবহার করে উপাদানগুলো প্রথম এবং শেষ প্রান্তে যোগ করা হয়েছে।- পরে
removeFirst()এবংremoveLast()মেথড ব্যবহার করে প্রথম এবং শেষ প্রান্ত থেকে উপাদানগুলি মুছে ফেলা হয়েছে।
2. LinkedList উদাহরণ:
import java.util.Deque;
import java.util.LinkedList;
public class LinkedListDequeExample {
public static void main(String[] args) {
// Creating a Deque using LinkedList
Deque<String> deque = new LinkedList<>();
// Adding elements to the Deque
deque.offerFirst("Java");
deque.offerLast("Python");
deque.offerFirst("C++");
// Displaying the Deque
System.out.println("Deque: " + deque); // Output: [C++, Java, Python]
// Removing elements from the Deque
System.out.println("Removed first: " + deque.pollFirst()); // Output: C++
System.out.println("Removed last: " + deque.pollLast()); // Output: Python
// Displaying the Deque after removal
System.out.println("Deque after removal: " + deque); // Output: [Java]
}
}
Output:
Deque: [C++, Java, Python]
Removed first: C++
Removed last: Python
Deque after removal: [Java]
ব্যাখ্যা:
offerFirst("Java"),offerLast("Python")ব্যবহার করে উপাদানগুলো first এবং last প্রান্তে যোগ করা হয়েছে।pollFirst()এবংpollLast()মেথড ব্যবহার করে উপাদানগুলো প্রথম এবং শেষ প্রান্ত থেকে মুছে ফেলা হয়েছে।
Deque এর ব্যবহারিক ক্ষেত্রে উদাহরণ:
- Task Scheduling (Queue):
- Deque একটি কার্যকরী queue হিসাবে কাজ করতে পারে যেখানে আপনি FIFO (First In First Out) পদ্ধতিতে কাজ করতে পারেন। তবে আপনি LIFO (Last In First Out) পদ্ধতিতেও কাজ করতে পারবেন, যেমন একটি stack।
- Palindrome Checking:
- একটি Deque এর সাহায্যে আপনি Palindrome যাচাই করতে পারেন। যেহেতু এটি উভয় প্রান্ত থেকে উপাদান মুছে ফেলতে সহায়তা করে, আপনি একটি শব্দের প্রথম এবং শেষ অক্ষর তুলনা করতে পারবেন।
- Undo/Redo Operations:
- আপনি Deque ব্যবহার করতে পারেন Undo এবং Redo অপারেশনগুলো পরিচালনা করতে। addFirst() দিয়ে undo স্ট্যাক তৈরি এবং addLast() দিয়ে redo স্ট্যাক তৈরি করা যেতে পারে।
Deque এর সুবিধা:
- Efficient Operations: Deque দ্রুততম সময়ে উপাদান যোগ এবং মুছে ফেলতে সক্ষম, বিশেষ করে যখন আপনি প্রথম এবং শেষ প্রান্তে কাজ করছেন।
- FIFO এবং LIFO সমর্থন: একই ক্লাসে আপনি queue (FIFO) এবং stack (LIFO) উভয় প্রকারের কার্যাবলী পরিচালনা করতে পারেন।
- Thread-Safety (Concurrent Deque):
ConcurrentLinkedDequeএবং অন্যান্য কনকারেন্ট ক্লাসগুলি Deque ইন্টারফেসের জন্য থ্রেড-সেফ সংস্করণ সরবরাহ করে, যা মাল্টি-থ্রেডেড প্রোগ্রামিং এর জন্য সহায়ক।
Deque ইন্টারফেস একটি শক্তিশালী ডেটা স্ট্রাকচার যা আপনাকে double-ended queue পরিচালনার সুবিধা প্রদান করে। এটি FIFO এবং LIFO উভয় প্রকারের কার্যাবলী পরিচালনা করতে সক্ষম এবং ArrayDeque, LinkedList ইত্যাদি ক্লাস দ্বারা বাস্তবায়িত হয়। Deque এর কার্যকারিতা এবং বিভিন্ন অপারেশন যেমন addFirst(), addLast(), removeFirst(), removeLast() দ্রুত এবং দক্ষভাবে সম্পাদিত হয়।
Read more