Queue এবং PriorityQueue Java Collections Framework এর অংশ, যা FIFO (First-In-First-Out) আর্কিটেকচার অনুসরণ করে এবং বিভিন্ন ধরনের ডেটা স্ট্রাকচার পরিচালনা করতে সাহায্য করে। Queue সাধারণত কোনো ডেটা প্রবাহের পরিচালনা করতে ব্যবহৃত হয়, যেখানে প্রথমে ঢোকানো এলিমেন্ট প্রথমে বের হয়।
PriorityQueue একটি বিশেষ ধরনের Queue যেখানে এলিমেন্টগুলিকে তাদের প্রাধান্য (priority) অনুযায়ী সাজানো হয়, অর্থাৎ সবচেয়ে গুরুত্বপূর্ণ (এবং নির্ধারিত priority) এলিমেন্টটি প্রথমে বের হবে।
নিচে Queue এবং PriorityQueue ব্যবহারের উদাহরণ দেওয়া হলো।
1. Queue Example: Queue ব্যবহার করে Data Structure পরিচালনা
Queue সাধারণভাবে FIFO (First-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার। এর মধ্যে প্রথমে ঢোকানো উপাদানটি প্রথমে বের হবে। Java তে Queue interface এর মাধ্যমে এই ডেটা স্ট্রাকচার পরিচালনা করা হয়।
Queue Example:
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Queue অবজেক্ট তৈরি করা (LinkedList ক্লাস ব্যবহার করা হয়েছে Queue ইন্টারফেসের জন্য)
Queue<String> queue = new LinkedList<>();
// Queue তে উপাদান যোগ করা
queue.add("Apple");
queue.add("Banana");
queue.add("Cherry");
queue.add("Date");
// Queue তে থাকা উপাদানগুলি প্রিন্ট করা
System.out.println("Queue: " + queue);
// প্রথম উপাদান বের করা (FIFO)
System.out.println("Removed: " + queue.poll()); // Apple - First element (FIFO)
// পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
System.out.println("Queue after removal: " + queue);
// Peek: পরবর্তী এলিমেন্ট দেখতে হবে (প্রথম ইন)
System.out.println("Next element to be removed: " + queue.peek()); // Banana
}
}
আউটপুট:
Queue: [Apple, Banana, Cherry, Date]
Removed: Apple
Queue after removal: [Banana, Cherry, Date]
Next element to be removed: Banana
ব্যাখ্যা:
Queueinterface ব্যবহার করে একটিLinkedListডেটা স্ট্রাকচার তৈরি করা হয়েছে।add()মেথড দিয়ে Queue তে এলিমেন্ট যোগ করা হয়েছে।poll()মেথড দিয়ে Queue থেকে প্রথম এলিমেন্ট বের করা হয়েছে (FIFO প্রক্রিয়া অনুযায়ী)।peek()মেথড ব্যবহার করে পরবর্তী এলিমেন্ট দেখা গেছে যা FIFO অনুযায়ী বের হবে।
2. PriorityQueue Example:
PriorityQueue একটি বিশেষ Queue যেখানে প্রতিটি এলিমেন্টের priority অনুযায়ী সাজানো হয়। PriorityQueue এর মাধ্যমে আপনি একটি এলিমেন্টের priority নির্ধারণ করে ডেটা স্ট্রাকচার পরিচালনা করতে পারেন। সবচেয়ে কম priority বা সবচেয়ে বেশি priority সহ এলিমেন্টটি প্রথমে বের হয় (ডিফল্টভাবে এটি natural ordering অনুসরণ করে, তবে Comparator ব্যবহার করে কাস্টম অর্ডারিং করা যেতে পারে)।
PriorityQueue Example:
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
// PriorityQueue অবজেক্ট তৈরি করা
PriorityQueue<String> priorityQueue = new PriorityQueue<>();
// Queue তে উপাদান যোগ করা
priorityQueue.add("Apple");
priorityQueue.add("Banana");
priorityQueue.add("Cherry");
priorityQueue.add("Date");
// PriorityQueue তে থাকা উপাদানগুলি প্রিন্ট করা (Natural order: Alphabetically)
System.out.println("PriorityQueue (Natural order): " + priorityQueue);
// প্রথম উপাদান বের করা (priority অনুযায়ী)
System.out.println("Removed: " + priorityQueue.poll()); // Apple - smallest according to alphabetic order
// পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
System.out.println("PriorityQueue after removal: " + priorityQueue);
// Peek: পরবর্তী এলিমেন্ট দেখতে হবে
System.out.println("Next element to be removed: " + priorityQueue.peek()); // Banana
}
}
আউটপুট:
PriorityQueue (Natural order): [Apple, Banana, Cherry, Date]
Removed: Apple
PriorityQueue after removal: [Banana, Date, Cherry]
Next element to be removed: Banana
ব্যাখ্যা:
PriorityQueueদ্বারা ডেটা সাজানো হচ্ছে alphabetically, কারণPriorityQueueডিফল্টভাবেnatural orderingঅনুসরণ করে।poll()মেথড দ্বারা সবচেয়ে ছোট এলিমেন্ট (এখানেApple) বের করা হয়েছে।peek()মেথড ব্যবহার করে পরবর্তী এলিমেন্টটি দেখা গেছে যা priority অনুযায়ী বের হবে (এখানেBanana).
কাস্টম PriorityQueue (Custom Ordering) Example:
আপনি যদি কাস্টম ordering চান, তবে Comparator ব্যবহার করে PriorityQueue তে কাস্টম সাজানো ব্যবস্থা করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে priority queue সংখ্যা অনুযায়ী সাজানো হবে।
Custom PriorityQueue Example (Integer Based Priority):
import java.util.PriorityQueue;
import java.util.Comparator;
public class CustomPriorityQueueExample {
public static void main(String[] args) {
// Custom Comparator দিয়ে PriorityQueue তৈরি করা যাতে বড় সংখ্যাগুলি আগে আসে
PriorityQueue<Integer> customQueue = new PriorityQueue<>(Comparator.reverseOrder());
// Queue তে উপাদান যোগ করা
customQueue.add(10);
customQueue.add(20);
customQueue.add(5);
customQueue.add(15);
// PriorityQueue তে থাকা উপাদানগুলি প্রিন্ট করা (Descending order)
System.out.println("Custom PriorityQueue (Descending order): " + customQueue);
// প্রথম উপাদান বের করা (Priority অনুযায়ী, বড় থেকে ছোট)
System.out.println("Removed: " + customQueue.poll()); // 20
// পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
System.out.println("Custom PriorityQueue after removal: " + customQueue);
// Peek: পরবর্তী এলিমেন্ট দেখতে হবে
System.out.println("Next element to be removed: " + customQueue.peek()); // 15
}
}
আউটপুট:
Custom PriorityQueue (Descending order): [20, 15, 10, 5]
Removed: 20
Custom PriorityQueue after removal: [15, 5, 10]
Next element to be removed: 15
ব্যাখ্যা:
PriorityQueueএComparator.reverseOrder()ব্যবহার করে কাস্টম সাজানো হয়েছে যাতে সবচেয়ে বড় এলিমেন্ট প্রথমে আসে।poll()মেথড ব্যবহার করে সবচেয়ে বড় এলিমেন্ট (20) প্রথমে বের করা হয়েছে।- Queue: FIFO (First-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার যা
LinkedListবাPriorityQueueদিয়ে কার্যকরীভাবে পরিচালনা করা যায়। - PriorityQueue: এটি একটি কাস্টম সাজানো Queue যেখানে ডেটা এলিমেন্টগুলো তাদের priority অনুযায়ী সাজানো হয়। এটি
Comparatorব্যবহার করে কাস্টম অর্ডারিং করতে পারে এবং প্রাধান্য অনুসারে ডেটা প্রক্রিয়া করতে সাহায্য করে।
Java তে Queue এবং PriorityQueue দুটি শক্তিশালী ডেটা স্ট্রাকচার যা বিভিন্ন ধরণের ডেটা পরিচালনা এবং প্রক্রিয়া করতে ব্যবহার করা হয়।
Read more