คิวคืออะไร?

Queue เป็นโครงสร้างข้อมูลทั่วไปใน Java ตามคำสั่ง แทรกFirst In First Out (FIFO)เช่นเดียวกับชื่อ ลองนึกภาพง่ายๆ ว่าเป็นคิวในร้านขายของชำ ยิ่งเข้าเร็ว ยิ่งออกเร็ว หมายความว่าองค์ประกอบที่เพิ่มลงในคิวก่อนหน้านี้จะออกก่อนหน้านี้เช่นกัน องค์ประกอบแรก ( ด้านหน้า) ของคิวเรียกอีกอย่างว่าheadQueue poll() วิธีการใน Java พร้อมตัวอย่าง - 2
รูปที่ 1.0: Queue อย่างง่ายใน Java

วิธีการโพล () ของคิวคืออะไร?

วิธีการสำรวจความคิดเห็น () ช่วยให้คุณสามารถดึงและลบองค์ประกอบบนสุด (ส่วนหัว) ของคิว ในตัวอย่างของเรา เมื่อคุณเรียกใช้ poll() ที่คิวด้านบน คุณจะได้รับ '1' เป็นผลลัพธ์ และจะเหลือเพียง 4 องค์ประกอบในคิวQueue poll() วิธีการใน Java พร้อมตัวอย่าง - 3
รูปที่ 1.1: หลังจากใช้เมธอด poll() ในคิว

วิธีการสำรวจความคิดเห็น () ใน Java

ตัวอย่างที่ 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

ลองดูตัวอย่างอื่นของวันในหนึ่งสัปดาห์ เราจะเรียกแบบสำรวจความคิดเห็นทีละรายการในวันธรรมดาและดูว่าเป็นอย่างไร

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() : ลบและดึงส่วนหัวของคิว
ดังนั้นดูเหมือนว่าremove()และpoll()จะเหมือนกันทุกประการ พวกเขาทำงานเหมือนกันในสถานการณ์ปกติ แต่เมื่อคิวว่างให้ Remove()พ่นNoSuchElementExceptionในขณะที่โพลจะส่งคืนค่าnull

ตัวอย่างที่ 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() ส่งคืน: วันอาทิตย์ วันในสัปดาห์ : [อาทิตย์, จันทร์, อังคาร, พุธ, พฤหัสบดี, ศุกร์, เสาร์] ลบ () คืน: อัพเดทวันอาทิตย์! [วันจันทร์ วันอังคาร วันพุธ วันพฤหัสบดี วันศุกร์ วันเสาร์] ลบ () กลับ: อัปเดตวันจันทร์! [อังคาร พุธ พฤหัสบดี ศุกร์ เสาร์] ลบ() คืน: อังคาร ลบ() ส่งกลับ: วันพุธ ลบ() ส่งกลับ: พฤหัสบดี ลบ() ส่งกลับ: วันศุกร์ อัปเดตวัน! [วันเสาร์] แบบสำรวจความคิดเห็น () ส่งคืน: อัปเดตวันเสาร์แล้ว! [] โพลล์ () ส่งคืน: null ข้อยกเว้นในเธรด "main" java.util.NoSuchElementException ที่ java.util.LinkedList.removeFirst(LinkedList.java:270) ที่ java.util.LinkedList.remove (LinkedList.java:
อย่างที่คุณเห็นหลังจากโทรpeek()วันธรรมดายังคงเหมือนเดิม และในขณะที่เราใช้การลบ ()หรือการสำรวจความคิดเห็น ()ขนาดของคิวจะลดลง 1 พร้อมกับส่งคืนส่วนหัว ยิ่งไปกว่านั้นjava.util.NoSuchElementExceptionจะถูกส่งออกไปเมื่อเราเรียกremove()ที่คิวว่าง ในขณะที่ไม่มีข้อยกเว้นดังกล่าวเกิดขึ้นจากการใช้poll()

บทสรุป

ในตอนท้าย เราหวังว่าคุณจะคุ้นเคยกับการใช้และการทำงานของเมธอด poll()ของ Queues อย่างไรก็ตามในกรณีที่เกิดความสับสน คุณสามารถกลับมาที่นี่เพื่อปรึกษาได้เสมอ มีความสุขในการเข้ารหัส!