java.util.Queue এবং java.util.Deque ইন্টারফেস দুটি Java Collections Framework এর অংশ এবং ডেটা স্ট্রাকচারগুলোর মধ্যে FIFO (First In First Out) এবং LIFO (Last In First Out) এর মতো কাজ করে। Queue এবং Deque ইন্টারফেসের মাধ্যমে আপনি উপাদানগুলোকে নির্দিষ্ট নিয়মে (যেমন, queue বা stack এর মতো) প্রক্রিয়া করতে পারেন।
1. Queue Interface
Queue ইন্টারফেস হল একটি collection যা FIFO (First In, First Out) ভিত্তিতে কাজ করে। এর অর্থ হলো প্রথমে যোগ করা উপাদানটি প্রথমে বের করা হবে। Queue সাধারণত linear data structure হিসেবে কাজ করে, যেখানে উপাদানগুলো একের পর এক প্রবাহিত হয়।
Key Features of Queue Interface:
- FIFO (First In, First Out): প্রথমে যোগ করা উপাদান প্রথমে বের হয়।
- add(): উপাদানটি যুক্ত করার জন্য ব্যবহৃত হয়।
- remove(): প্রথম উপাদানটি মুছে ফেলার জন্য ব্যবহৃত হয়।
- peek(): প্রথম উপাদানটি দেখতে দেয়, কিন্তু মুছে ফেলে না।
- offer(): উপাদানটি যুক্ত করার জন্য ব্যবহৃত হয়, কিন্তু যদি Queue পূর্ণ থাকে তবে false ফেরত দেয়।
Example: Queue Implementation (Using LinkedList)
import java.util.Queue;
import java.util.LinkedList;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
// Adding elements to the queue
queue.add("Apple");
queue.add("Banana");
queue.add("Orange");
// Printing the queue
System.out.println("Queue: " + queue);
// Removing elements from the queue
System.out.println("Removed element: " + queue.remove());
// Peek at the first element
System.out.println("First element: " + queue.peek());
// Printing the updated queue
System.out.println("Updated Queue: " + queue);
}
}
Output:
Queue: [Apple, Banana, Orange]
Removed element: Apple
First element: Banana
Updated Queue: [Banana, Orange]
ব্যাখ্যা:
Queueইন্টারফেসের বাস্তবায়ন হিসেবেLinkedListব্যবহার করা হয়েছে।add()মেথডের মাধ্যমে উপাদান যোগ করা হয়েছে,remove()মেথডের মাধ্যমে প্রথম উপাদানটি মুছে ফেলা হয়েছে এবংpeek()মেথডে প্রথম উপাদানটি দেখা হয়েছে।
2. Deque Interface
Deque (Double-Ended Queue) ইন্টারফেস হল একটি Queue এর উন্নত সংস্করণ যা উপাদানগুলিকে দুই দিক থেকে (প্রথমে এবং শেষে) যোগ এবং মুছে ফেলার সুবিধা প্রদান করে। Deque FIFO এবং LIFO (Last In, First Out) উভয় ধরণের অপারেশন সমর্থন করে। এটি সাধারণত double-ended queue হিসেবে পরিচিত, যেখানে আপনি উভয় দিক থেকেই উপাদান অ্যাক্সেস করতে পারেন।
Key Features of Deque Interface:
- FIFO and LIFO: Deque উভয় ধরণের অপারেশন সমর্থন করে (FIFO এবং LIFO)।
- addFirst(): প্রথমে উপাদান যোগ করা হয়।
- addLast(): শেষে উপাদান যোগ করা হয়।
- removeFirst(): প্রথম উপাদান মুছে ফেলা হয়।
- removeLast(): শেষ উপাদান মুছে ফেলা হয়।
- peekFirst(): প্রথম উপাদান দেখতে পাওয়া যায়।
- peekLast(): শেষ উপাদান দেখতে পাওয়া যায়।
Example: Deque Implementation (Using LinkedList)
import java.util.Deque;
import java.util.LinkedList;
public class DequeExample {
public static void main(String[] args) {
Deque<String> deque = new LinkedList<>();
// Adding elements to the deque
deque.addFirst("Apple");
deque.addLast("Banana");
deque.addLast("Orange");
// Printing the deque
System.out.println("Deque: " + deque);
// Removing elements from the deque
System.out.println("Removed first element: " + deque.removeFirst());
System.out.println("Removed last element: " + deque.removeLast());
// Peek at the first and last element
System.out.println("First element: " + deque.peekFirst());
System.out.println("Last element: " + deque.peekLast());
// Printing the updated deque
System.out.println("Updated Deque: " + deque);
}
}
Output:
Deque: [Apple, Banana, Orange]
Removed first element: Apple
Removed last element: Orange
First element: Banana
Last element: Banana
Updated Deque: [Banana]
ব্যাখ্যা:
Dequeইন্টারফেসের বাস্তবায়ন হিসেবেLinkedListব্যবহার করা হয়েছে।addFirst()এবংaddLast()মেথডের মাধ্যমে উপাদান উভয় দিক থেকে যোগ করা হয়েছে।removeFirst()এবংremoveLast()মেথডের মাধ্যমে উপাদান উভয় দিক থেকে মুছে ফেলা হয়েছে।
Queue এবং Deque এর মধ্যে পার্থক্য
| Feature | Queue | Deque |
|---|---|---|
| Insertion | Only at the end (FIFO) | At both ends (FIFO and LIFO) |
| Removal | Only from the front (FIFO) | From both ends (FIFO and LIFO) |
| Common Implementations | LinkedList, PriorityQueue | LinkedList, ArrayDeque |
| Flexibility | Less flexible (only FIFO) | More flexible (FIFO and LIFO) |
| Efficiency | Efficient for FIFO operations | Efficient for both FIFO and LIFO operations |
When to Use Queue and Deque?
- Queue:
- ব্যবহার করুন যখন আপনি FIFO পদ্ধতি অনুসরণ করে উপাদান গুলি প্রক্রিয়া করতে চান, যেমন task scheduling, buffering ইত্যাদি।
- Deque:
- ব্যবহার করুন যখন আপনি FIFO বা LIFO যেকোনো পদ্ধতি ব্যবহার করতে চান, যেমন undo/redo operations, deque-based sliding window algorithms, deque-based double-ended queues ইত্যাদি।
- Queue ইন্টারফেস একটি FIFO (First In First Out) ডেটা স্ট্রাকচার প্রদান করে, যেখানে উপাদানগুলি একে একে প্রক্রিয়া হয় এবং প্রথমে যোগ করা উপাদানটি প্রথমে বের হয়।
- Deque ইন্টারফেস একটি উন্নত ডেটা স্ট্রাকচার যা উপাদানগুলি উভয় দিক থেকে (প্রথমে এবং শেষে) যোগ এবং মুছে ফেলতে পারে এবং এটি FIFO এবং LIFO উভয় পদ্ধতি সমর্থন করে।
আপনার প্রোগ্রামে যদি আপনি FIFO (queue) বা LIFO (stack) প্রক্রিয়া করতে চান, তবে Queue এবং Deque ইন্টারফেসে নির্দিষ্ট মেথডগুলোর মাধ্যমে আপনি সেই কাজগুলো সহজেই করতে পারবেন।
Read more