Queue এবং Deque উভয়ই Java Collections Framework এর অংশ এবং তারা ডেটা স্ট্রাকচার হিসেবে ব্যবহার হয় যেখানে ডেটা প্রক্রিয়া করার জন্য একটি নির্দিষ্ট আদর্শ (order) অনুসরণ করা হয়। তবে, তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা তাদের ব্যবহারের ক্ষেত্রে প্রভাব ফেলে। এখানে আমরা Queue এবং Deque এর মধ্যে পার্থক্য এবং ব্যবহার আলোচনা করব।
Queue একটি ডেটা স্ট্রাকচার যা FIFO (First-In-First-Out) নিয়মে কাজ করে, অর্থাৎ প্রথমে যে উপাদানটি যুক্ত হয়, সেটি প্রথমে বের হয়। এটি একটি সাধারণ লাইন বা কিউ-এর মতো কাজ করে, যেমন লাইনে দাঁড়িয়ে থাকা। যখন একটি উপাদান কিউ থেকে বের করা হয়, তখন নতুন উপাদান সেটির স্থানে যোগ করা হয়।
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Create a Queue using LinkedList
Queue<String> queue = new LinkedList<>();
// Add elements to the queue
queue.add("apple");
queue.add("banana");
queue.add("orange");
// Remove elements from the queue (FIFO)
System.out.println(queue.poll()); // Output: apple
System.out.println(queue.poll()); // Output: banana
}
}
এখানে, প্রথমে "apple" যোগ করা হয়েছে এবং সেটি প্রথমে বের করা হয়েছে, এটি FIFO আদর্শ অনুসরণ করে।
Deque (যা "Double-Ended Queue" এর সংক্ষেপ) একটি ডেটা স্ট্রাকচার যা queue এর মতো কাজ করে তবে এতে দুটি শেষ (front এবং rear) থাকে। এটি উপাদান যুক্ত এবং সরানোর জন্য দুটি দিক থেকে কাজ করতে সক্ষম (যেমন, সামনে এবং পেছনে)। এর মানে হলো, আপনি FIFO বা LIFO (Last-In-First-Out) যে কোনো পদ্ধতি অনুসরণ করে উপাদান বের করতে পারেন, যা Queue থেকে আরও উন্নত।
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
// Create a Deque using ArrayDeque
Deque<String> deque = new ArrayDeque<>();
// Add elements to the front and rear
deque.addFirst("apple");
deque.addLast("banana");
deque.addFirst("orange");
// Remove elements from the front and rear
System.out.println(deque.pollFirst()); // Output: orange (FIFO)
System.out.println(deque.pollLast()); // Output: banana (LIFO)
}
}
এখানে, Deque ব্যবহার করে উপাদান দুটি দিক থেকে যোগ এবং সরানো হয়েছে। addFirst() এবং addLast() এর মাধ্যমে উপাদান যুক্ত করা হয়েছে, এবং pollFirst() এবং pollLast() এর মাধ্যমে উপাদান সরানো হয়েছে।
পয়েন্ট | Queue | Deque |
---|---|---|
অর্থ | Queue একটি সাধারণ একমুখী (FIFO) ডেটা স্ট্রাকচার। | Deque একটি ডাবল এন্ডেড কিউ, যা উভয় দিক থেকে উপাদান প্রক্রিয়া করতে সক্ষম। |
ডেটা প্রবাহ | FIFO পদ্ধতিতে উপাদান প্রবাহিত হয়। | FIFO বা LIFO উভয় পদ্ধতি অনুসরণ করতে পারে। |
অপারেশন | add(), remove(), peek() | addFirst(), addLast(), removeFirst(), removeLast() |
দিক | শুধুমাত্র একটি দিক থেকে উপাদান অ্যাক্সেস করা যায়। | উভয় দিক থেকে উপাদান অ্যাক্সেস এবং প্রক্রিয়া করা যায়। |
ব্যবহার | সাধারণ কিউ সিস্টেম (যেমন প্রিন্টার কিউ বা লাইনে দাঁড়ানো)। | কিউ এবং স্ট্যাক উভয়ের সুবিধা, যেমন ক্যাশে সিস্টেম বা Undo operations। |
প্রকার | সাধারণত Queue, PriorityQueue ব্যবহার হয়। | সাধারণত ArrayDeque, LinkedList ব্যবহার হয়। |
Queue এবং Deque উভয়ই জাভাতে ডেটা স্ট্রাকচার হিসেবে ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য হলো Queue একটি একমুখী ডেটা স্ট্রাকচার যা FIFO অনুসরণ করে, যেখানে উপাদানগুলো এক দিক থেকে প্রবাহিত হয়। অন্যদিকে, Deque একটি ডাবল এন্ডেড কিউ যা FIFO বা LIFO উভয় পদ্ধতিতে কাজ করতে সক্ষম এবং এটি উপাদানগুলোকে উভয় দিক থেকে অ্যাক্সেস এবং ম্যানিপুলেট করতে পারে।
Queue সাধারণত এমন কেসে ব্যবহার হয় যেখানে শুধুমাত্র একটি দিক থেকে উপাদান প্রবাহিত হয়, যেমন প্রিন্টার কিউ, যখন Deque ব্যবহার হয় যখন আপনাকে উভয় দিক থেকে উপাদান যুক্ত এবং সরাতে হয়, যেমন LRU Cache বা Undo/Redo operations।
common.read_more