تتوفر قائمة انتظار الواجهة في الحزمة java.util وتقوم بتوسيع واجهة المجموعة. يتم استخدامه للاحتفاظ بالعناصر التي تتم معالجتها بطريقة الوارد أولاً يخرج أولاً (FIFO). هي قائمة مرتبة من الكائنات، حيث يتم إدراج العناصر في نهاية القائمة، ويتم حذف العناصر في بداية القائمة.
كونها واجهة، تتطلب قائمة الانتظار فئة محددة للإعلان، والفئات الأكثر شيوعًا هي LinkedList وPriorityQueue في Java. عمليات التنفيذ التي تتم بواسطة هذه الفئات ليست آمنة لمؤشر الترابط. إذا كان مطلوبًا تنفيذ مؤشر ترابط آمن، فإن PriorityBlockingQueue هو خيار متاح.
إعلان واجهة قائمة الانتظار
public interface Queue extends Collection
طرق واجهة قائمة انتظار جافا
طريقة | وصف |
---|---|
إضافة منطقية (كائن) | يتم استخدامه لإدراج العنصر المحدد في قائمة الانتظار هذه وإرجاع صحيح عند النجاح. |
عرض منطقي (كائن) | يتم استخدامه لإدراج العنصر المحدد في قائمة الانتظار هذه. |
إزالة الكائن () | يتم استخدامه لاسترداد وإزالة رأس قائمة الانتظار هذه. |
استطلاع الكائن () | يتم استخدامه لاسترداد وإزالة رأس قائمة الانتظار هذه، أو إرجاع قيمة فارغة إذا كانت قائمة الانتظار هذه فارغة. |
عنصر الكائن() | يتم استخدامه لاسترداد رأس قائمة الانتظار هذه، لكنه لا يزيلها. |
نظرة خاطفة على الكائن () | يتم استخدامه لاسترداد رأس قائمة الانتظار هذه، ولكن لا يقوم بإزالتها، أو إرجاع قيمة فارغة إذا كانت قائمة الانتظار هذه فارغة. |
ميزات قائمة الانتظار
وفيما يلي بعض الميزات الهامة لقائمة الانتظار.
- كما ناقشنا سابقًا، يتم استخدام مفهوم FIFO لإدراج وحذف العناصر من قائمة الانتظار.
- توفر قائمة انتظار Java الدعم لجميع أساليب واجهة المجموعة بما في ذلك الحذف والإدراج وما إلى ذلك.
- تعد PriorityQueue وArrayBlockingQueue وLinkedList هي التطبيقات الأكثر استخدامًا.
- يتم رفع NullPointerException في حالة إجراء أي عملية فارغة على BlockingQueues.
- قوائم الانتظار تلك الموجودة في util تُعرف الحزمة باسم قوائم الانتظار غير المحدودة.
- قوائم الانتظار تلك الموجودة في مفيد تُعرف الحزمة باسم قوائم الانتظار المحدودة.
- تسهل جميع قوائم الانتظار التي تحظر Deques عملية الإزالة والإدراج في رأس قائمة الانتظار وذيلها؛ على التوالى. في الواقع، تدعم deques إدراج العناصر وإزالتها من كلا الطرفين.
فئة قائمة الانتظار ذات الأولوية
PriorityQueue هي أيضًا فئة تم تعريفها في إطار عمل المجموعة والتي تمنحنا طريقة لمعالجة الكائنات على أساس الأولوية. لقد تم وصف أن إدراج الكائنات وحذفها يتبع نمط FIFO في قائمة انتظار Java. ومع ذلك، في بعض الأحيان تكون هناك حاجة إلى معالجة عناصر قائمة الانتظار وفقًا للأولوية، وهنا يأتي دور PriorityQueue.
إعلان فئة قائمة الانتظار الأولوية
دعونا نرى إعلان فئة java.util.PriorityQueue.
public class PriorityQueue extends AbstractQueue implements Serializable
مثال على قائمة انتظار الأولوية في جافا
اسم الملف: TestCollection12.java
import java.util.*; class TestCollection12{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit'); queue.add('Vijay'); queue.add('Karan'); queue.add('Jai'); queue.add('Rahul'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } }اختبره الآن
انتاج:
head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay
مثال Java PriorityQueue: Book
دعونا نرى مثالاً على PriorityQueue حيث نقوم بإضافة كتب إلى قائمة الانتظار وطباعة جميع الكتب. يجب أن تكون العناصر الموجودة في PriorityQueue من النوع القابل للمقارنة. فئات السلسلة والمغلف قابلة للمقارنة بشكل افتراضي. لإضافة كائنات معرفة من قبل المستخدم في PriorityQueue، تحتاج إلى تنفيذ واجهة قابلة للمقارنة.
مجموعة بايت إلى السلسلة
اسم الملف: LinkedListExample.java
import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } public int compareTo(Book b) { if(id>b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class linkedlistexample { static void main(string[] args) queue priorityqueue(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to the queue.add(b1); queue.add(b2); queue.add(b3); system.out.println('traversing elements:'); traversing elements for(book b:queue){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); queue.remove(); system.out.println('after removing one record:'); < pre> <p> <strong>Output:</strong> </p> <pre>Traversing the queue elements: 101 Data Communications & Networking Forouzan Mc Graw Hill 4 233 Operating System Galvin Wiley 6 121 Let us C Yashwant Kanetkar BPB 8 After removing one book record: 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <hr></b.id){>