ما هي قائمة الانتظار؟
تمامًا كما يوحي الاسم، فإن قائمة الانتظار هي بنية بيانات شائعة في Java تتبع ترتيب الإدراج First In First Out (FIFO) . يمكنك بسهولة أن تتخيله كطابور في محل بقالة. كلما دخلت أسرع، كلما غادرت أسرع. وهذا يعني أن العنصر الذي تمت إضافته إلى قائمة الانتظار مسبقًا سيغادر مبكرًا أيضًا. يُسمى العنصر الأول (الأمامي) في قائمة الانتظار أيضًا بالرأس .ما هي طريقة الاستطلاع () لقائمة الانتظار؟
تتيح لك طريقة poll() استرداد وإزالة العنصر العلوي (الرأس) في قائمة الانتظار. في مثالنا، عند استدعاء poll() في قائمة الانتظار أعلاه، ستتلقى الرقم "1" نتيجة لذلك. وسيكون هناك 4 عناصر فقط متبقية في قائمة الانتظار.طريقة الاستطلاع () في جافا
مثال 1
ألقِ نظرة على مثال بسيط لاستدعاء وظيفة poll() في قائمة الانتظار الموضحة في الشكل 1.0.import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
// create a queue of die rolls
Queue dieRoll = new LinkedList();
// Add 6 integers one by one
dieRoll.add(1);
dieRoll.add(2);
dieRoll.add(3);
dieRoll.add(4);
dieRoll.add(5);
dieRoll.add(6);
// print the original queue
System.out.println("Queue:\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
}
}
انتاج |
قائمة الانتظار: [1، 2، 3، 4، 5، 6] تم إرجاع الاستقصاء () : تم تحديث قائمة انتظار واحدة! [2، 3، 4، 5، 6] تم إرجاع الاستطلاع (): تم تحديث قائمة الانتظار 2! [3، 4، 5، 6] تم إرجاع الاستطلاع (): تم تحديث قائمة الانتظار الثلاثة! [4، 5، 6]
يرجى ملاحظة أنه بعد كل استدعاء poll() يتم تقليل حجم قائمة الانتظار بمقدار 1 ويتم إرجاع الرأس.
مثال 2
دعونا نلقي نظرة على مثال آخر لأيام الأسبوع. سنتصل بالاستطلاع () واحدًا تلو الآخر خلال أيام الأسبوع ونرى كيف يبدو.import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
}
}
انتاج |
أيام الأسبوع: [الأحد، الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الاستطلاع (): تم تحديث أيام الأحد! [الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الاستطلاع (): تم تحديث أيام الاثنين! [الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الاستطلاع (): تم تحديث أيام الثلاثاء! [الأربعاء، الخميس، الجمعة، السبت]
كيف يختلف الاستطلاع () عن النظرة الخاطفة () والإزالة ()؟
من السهل جدًا على المبتدئين الخلط بين المفاهيم الثلاثة المختلفة نظرًا لأنها تبدو متشابهة تمامًا. لنفترض أن "q" عبارة عن قائمة انتظار، وإليك كيفية اختلافها:- q.poll() : يزيل ويستعيد رأس قائمة الانتظار
- q.peek() : لا يزيل، بل يسترد/يعيد رأس قائمة الانتظار فقط
- q.remove() : يزيل ويستعيد رأس قائمة الانتظار
مثال 3
الآن دعونا نلقي نظرة سريعة على بعض الأمثلة على الوظائف الثلاث المذكورة أعلاه.import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling peek()
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
// after calling remove()
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("poll() returned: " + days.poll());
System.out.println("remove() returned: " + days.remove());
}
}
انتاج |
أيام الأسبوع: [الأحد، الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع peek(): الأحد أيام الأسبوع: [الأحد، الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع peek(): أيام الأسبوع الأحد : [الأحد، الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الإزالة (): تم تحديث أيام الأحد! [الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الإزالة (): تم تحديث أيام الاثنين! [الثلاثاء، الأربعاء، الخميس، الجمعة، السبت] تم إرجاع الإزالة (): تم إرجاع الإزالة () من الثلاثاء: تم إرجاع الإزالة () من الأربعاء: تم إرجاع الإزالة () من الخميس: تم تحديث أيام الجمعة! تم إرجاع استطلاع [السبت] (): تم تحديث أيام السبت! [] تم إرجاع الاستطلاع (): استثناء فارغ في مؤشر الترابط "الرئيسي" java.util.NoSuchElementException في java.util.LinkedList.removeFirst(LinkedList.java:270) في java.util.LinkedList.remove(LinkedList.java:685) في QueuePollMethod.main (QueuePollMethod.java:48)
كما ترون بعد استدعاء peek() تظل أيام الأسبوع كما هي. وعندما نستخدم إزالة () أو استطلاع () يتم تقليل حجم قائمة الانتظار بمقدار 1 مع إرجاع الرأس. علاوة على ذلك، يتم طرح java.util.NoSuchElementException عندما نستدعي Remove() في قائمة انتظار فارغة، في حين لا يتم طرح مثل هذا الاستثناء لاستخدام poll() .
GO TO FULL VERSION