CodeGym /Blog Java /Ngẫu nhiên /Queue poll() Phương thức trong Java với các ví dụ

Queue poll() Phương thức trong Java với các ví dụ

Xuất bản trong nhóm

Hàng đợi là gì?

Đúng như tên gọi, Queue là một cấu trúc dữ liệu phổ biến trong Java theo thứ tự chèn First In First Out (FIFO) . Bạn có thể dễ dàng tưởng tượng nó giống như một hàng đợi tại một cửa hàng tạp hóa. Bạn vào càng sớm, bạn càng rời đi sớm. Điều đó có nghĩa là phần tử được thêm vào hàng đợi sớm hơn cũng sẽ rời đi sớm hơn. Phần tử đầu tiên (phía trước) của hàng đợi còn được gọi là phần đầu .Queue poll() Phương thức trong Java với các ví dụ - 2
Hình 1.0: Một hàng đợi đơn giản trong Java

Phương thức poll() của Queue là gì?

Phương thức poll() cho phép bạn truy xuất và xóa phần tử trên cùng (phần đầu) của Hàng đợi. Trong ví dụ của chúng tôi, khi bạn gọi poll() ở hàng đợi trên, kết quả là bạn sẽ nhận được '1'. Và sẽ chỉ còn lại 4 phần tử trong hàng đợi.Queue poll() Phương thức trong Java với các ví dụ - 3
Hình 1.1: Sau khi sử dụng phương thức poll() trên hàng đợi

phương thức thăm dò () trong Java

ví dụ 1

Hãy xem một ví dụ đơn giản về cách gọi hàm poll() trên hàng đợi được minh họa trong hình 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");        
	}
}
đầu ra
Hàng đợi: [1, 2, 3, 4, 5, 6] thăm dò ý kiến() trả về : 1 Đã cập nhật hàng đợi! [2, 3, 4, 5, 6] thăm dò ý kiến() trả về : 2 Đã cập nhật hàng đợi! [3, 4, 5, 6] thăm dò ý kiến() đã trả về : 3 Đã cập nhật hàng đợi! [4, 5, 6]
Xin lưu ý, làm thế nào sau mỗi poll() kích thước cuộc gọi của hàng đợi giảm đi 1 và đầu được trả về.

ví dụ 2

Hãy xem một ví dụ khác về các ngày trong một tuần. Chúng ta sẽ gọi poll() từng cái một vào các ngày trong tuần và xem nó trông như thế nào.

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");                   
	}
}
đầu ra
Ngày trong tuần: [Chủ Nhật, Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm, Thứ Sáu, Thứ Bảy] poll() đã trả về: Chủ nhật Ngày cập nhật! [Thứ hai thứ ba thứ tư thứ năm thứ sáu thứ bảy] poll() đã trả về: Thứ Hai Ngày cập nhật! [Thứ ba thứ tư thứ năm thứ sáu thứ Bảy] poll() đã trả về: Thứ ba Ngày cập nhật! [Thứ tư thứ năm thứ sáu Thứ Bảy]

Poll() khác với peek() và remove() như thế nào?

Người mới bắt đầu rất dễ nhầm lẫn ba khái niệm khác nhau vì chúng trông khá giống nhau. Giả sử “q” là một hàng đợi, sau đây là cách chúng khác nhau:
  • q.poll() : xóa và lấy phần đầu của hàng đợi
  • q.peek() : không xóa mà chỉ truy xuất/trả về phần đầu của hàng đợi
  • q.remove() : xóa và lấy phần đầu của hàng đợi
Vì vậy, có vẻ như remove()poll() hoàn toàn giống nhau. Họ làm việc giống hệt nhau trong trường hợp bình thường. Nhưng khi hàng đợi trống, remove() ném ra NoSuchElementException , trong khi poll trả về null .

ví dụ 3

Bây giờ chúng ta hãy xem nhanh một vài ví dụ về ba chức năng trên.

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()); 

	}
}
đầu ra
Ngày trong tuần: [Chủ Nhật, Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm, Thứ Sáu, Thứ Bảy] look() đã trả về: Chủ nhật Ngày trong tuần: [Chủ Nhật, Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm, Thứ Sáu, Thứ Bảy] look() đã trả về: Chủ nhật Ngày trong tuần: [Chủ Nhật, Thứ Hai, Thứ Ba, Thứ Tư, Thứ Năm, Thứ Sáu, Thứ Bảy] Remove() trả về: Chủ nhật Ngày cập nhật! [Thứ hai thứ ba thứ tư thứ năm thứ sáu thứ bảy] Remove() đã trả về: Thứ Hai Ngày cập nhật! [Thứ ba thứ tư thứ năm thứ sáu thứ Bảy] Remove() đã trả về: Thứ ba Remove() đã trả về: Thứ Tư Remove() đã trả về: Thứ năm Remove() đã trả về: Thứ sáu Ngày cập nhật! [Thứ bảy] poll() đã trả về: Thứ bảy Ngày cập nhật! [] thăm dò ý kiến() trả về: null Ngoại lệ trong luồng "chính" java.util.NoSuchElementException tại java.util.LinkedList.removeFirst(LinkedList.java:270) tại java.util.LinkedList.remove(LinkedList.java:685) tại QueuePollMethod.main(QueuePollMethod.java:48)
Như bạn có thể thấy sau khi gọi peek() các ngày trong tuần vẫn giữ nguyên. Và khi chúng ta sử dụng remove() hoặc poll(), kích thước của hàng đợi sẽ giảm đi 1 cùng với việc trả về phần đầu. Hơn nữa, java.util.NoSuchElementException được ném ra khi chúng ta gọi remove() tại một hàng đợi trống, trong khi không có ngoại lệ nào được ném ra để sử dụng poll() .

Phần kết luận

Cuối cùng, chúng tôi hy vọng bạn đã quen với việc sử dụng và hoạt động của phương thức poll() của Hàng đợi. Tuy nhiên, trong trường hợp có bất kỳ sự nhầm lẫn nào, bạn luôn có thể quay lại đây để tham khảo. Mã hóa vui vẻ!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION