🧵 آشنایی با PriorityQueue در Java
در زبان برنامهنویسی جاوا، کلاس PriorityQueue
یکی از پیادهسازیهای رابط Queue
در چارچوب مجموعهها (`Collections`) است. این ساختار داده، همانطور که از نامش پیداست، بر اساس "اولویت" عناصر عمل میکند، نه بر اساس ترتیب درج.
✅ ویژگیهای اصلی PriorityQueue:
* این کلاس عناصر را بهصورت پیشفرض بر اساس ترتیب طبیعی (`natural ordering`) مرتب میکند.
* در صورت نیاز میتوان ترتیب دلخواه را با استفاده از کلاس Comparator
تعریف کرد.
* هنگام بازیابی عناصر، کماولویتترین عنصر (کوچکترین بر اساس ترتیب) در اول صف قرار میگیرد.
* این کلاس نخامن (Thread-safe) نیست.
🛠️ توابع پرکاربرد در PriorityQueue:
add(E e) // اضافه کردن عنصر به صف
offer(E e) // مانند add، ولی اگر جای خالی نباشد false برمیگرداند
peek() // مشاهده عنصر اول بدون حذف آن
poll() // حذف و بازگرداندن عنصر اول
remove(Object o) // حذف عنصر خاص
contains(Object o) // بررسی وجود عنصر خاص در صف
size() // تعداد عناصر موجود در صف
clear() // پاک کردن همه عناصر
🔍 مثال عملی با توضیح:
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
// ساخت یک PriorityQueue از نوع عدد صحیح
PriorityQueue<Integer> queue = new PriorityQueue<>();
// اضافه کردن عناصر
queue.add(30);
queue.add(10);
queue.add(20);
// مشاهده عنصر اول بدون حذف
System.out.println("عنصر اول (peek): " + queue.peek());
// حذف عنصر اول و چاپ آن
System.out.println("حذف شده (poll): " + queue.poll());
// چاپ باقیمانده عناصر
System.out.println("محتوای صف: " + queue);
}
}
📌 توضیح کد:
در این مثال، ابتدا یک
PriorityQueue
از نوع Integer
تعریف شده است. با اضافه کردن اعداد 30، 10 و 20، چون اولویت پیشفرض عدد کوچکتر است، عدد 10 به عنوان اولین عنصر در صف قرار میگیرد.تابع
peek()
عدد 10 را بدون حذف نشان میدهد، سپس poll()
آن را حذف کرده و نمایش میدهد. در نهایت صف شامل 20 و 30 میشود که به ترتیب از کوچک به بزرگ مرتب هستند.⚠️ نکته مهم:
اگر میخواهید عناصر را بر اساس ترتیبی متفاوت مرتب کنید (مثلاً از بزرگ به کوچک)، میتوانید از
Comparator
استفاده کنید:
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
🧠 جمعبندی:
کلاس
PriorityQueue
یک ابزار قدرتمند برای مدیریت صفهای اولویتی در جاوا است که در الگوریتمهایی مانند صفهای پردازش وظایف، زمانبندی و ساختارهای جستجو بسیار مفید است.#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
>>Click here to continue<<