صف چیست؟
درست همانطور که از نام آن پیداست، صف یک ساختار داده رایج در جاوا است که از ترتیب درج First In First Out (FIFO) پیروی می کند . شما به راحتی می توانید آن را به عنوان یک صف در یک فروشگاه مواد غذایی تصور کنید. هر چه زودتر وارد شوید زودتر خارج می شوید. این بدان معناست که عنصری که قبلاً به صف اضافه شده است نیز زودتر از آن خارج می شود. اولین عنصر (جلو) صف نیز head نامیده می شود .
متد poll() Queue چیست؟
متد poll() به شما امکان می دهد تا بالاترین عنصر (هد) یک صف را بازیابی و حذف کنید. در مثال ما، وقتی poll() را در صف بالا فراخوانی میکنید، در نتیجه "1" را دریافت خواهید کرد. و تنها 4 عنصر در صف باقی خواهد ماند.
متد poll() در جاوا
مثال 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] نظرسنجی() بازگشت: 1 صف به روز شد! [2، 3، 4، 5، 6] نظرسنجی () بازگشت: 2 صف به روز شد! [3، 4، 5، 6] نظرسنجی () بازگشت: 3 صف به روز شد! [4، 5، 6]
لطفاً توجه داشته باشید که چگونه پس از هر نظرسنجی () اندازه فراخوانی صف 1 کاهش می یابد و هد برگردانده می شود.
مثال 2
بیایید نمونه دیگری از روزهای یک هفته را بررسی کنیم. ما poll() را یکی یکی در روزهای هفته فراخوانی می کنیم و می بینیم که چگونه به نظر می رسد.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");
}
}
خروجی
روزهای هفته: [یکشنبه، دوشنبه، سهشنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] نظرسنجی () بازگشت: یکشنبهها بهروزرسانی شد! [دوشنبه، سهشنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] نظرسنجی () بازگشت: دوشنبهها بهروزرسانی شد! [سهشنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] نظرسنجی () بازگشت: روز سهشنبه بهروزرسانی شد! [چهارشنبه، پنجشنبه، جمعه، شنبه]
نظرسنجی() چه تفاوتی با peek() و remove() دارد؟
برای مبتدیان بسیار آسان است که سه مفهوم مختلف را با هم ترکیب کنند زیرا کاملاً شبیه به هم هستند. بیایید "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() بازگشت: یکشنبه روزهای هفته : [یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] remove() بازگشت: یکشنبه روز به روز شد! [دوشنبه، سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] remove() بازگشت: دوشنبه روز به روز شد! [سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه] remove() بازگشت: سه شنبه remove() بازگشت: چهارشنبه remove() بازگشت: پنجشنبه remove() بازگشت: جمعه روزهای به روز شد! [شنبه] نظرسنجی() برگشت: روزهای شنبه به روز شد! [] poll() برگرداند: null Exception در رشته "main" java.util.NoSuchElementException در java.util.LinkedList.removeFirst(LinkedList.java:270) در java.util.LinkedList.remove(LinkedList.java:685.java) QueuePollMethod.main(QueuePollMethod.java:48)
همانطور که می بینید پس از فراخوانی peek() روزهای هفته ثابت می مانند. و همانطور که از remove() یا poll() استفاده می کنیم ، اندازه صف همراه با بازگشت سر به 1 کاهش می یابد. علاوه بر این، java.util.NoSuchElementException زمانی که ما remove() را در یک صف خالی فراخوانی می کنیم، پرتاب می شود، در حالی که چنین استثنایی برای استفاده از poll() پرتاب نمی شود .
GO TO FULL VERSION