CodeGym /Java Blog /Toto sisi /Java 中的隊列 poll() 方法及其示例
John Squirrels
等級 41
San Francisco

Java 中的隊列 poll() 方法及其示例

在 Toto sisi 群組發布

什麼是隊列?

顧名思義,Queue 是 Java 中一種常見的數據結構,遵循先進先出(FIFO)的插入順序。您可以很容易地將其想像成雜貨店的隊列。越早進入,越早離開。這意味著較早添加到隊列中的元素也將較早離開。隊列的第一個元素(前面)也稱為headJava 中的隊列 poll() 方法及其示例 - 2
圖 1.0:Java 中的一個簡單隊列

Queue的poll()方法是什麼?

poll() 方法允許您檢索和刪除隊列的最頂層元素(頭)。在我們的示例中,當您在上述隊列中調用 poll() 時,您將收到“1”作為結果。隊列中將只剩下 4 個元素。Java 中的隊列 poll() 方法及其示例 - 3
圖 1.1:在隊列上使用 poll() 方法之後

Java 中的 poll() 方法

示例 1

看一下在圖 1.0 中所示的隊列上 調用poll()函數的簡單示例。

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] poll() 返回:1 隊列已更新![2, 3, 4, 5, 6] poll() 返回:2 隊列已更新![3, 4, 5, 6] poll() 返回:3 隊列已更新![4, 5, 6]
請注意,每次poll() 調用後,隊列大小減 1 並返回 head。

示例 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");                   
	}
}
輸出
工作日:[週日、週一、週二、週三、週四、週五、週六] poll() 返回:週日更新![週一、週二、週三、週四、週五、週六] poll() 返回:週一更新![週二、週三、週四、週五、週六] poll() 返回:週二更新![週三、週四、週五、週六]

poll() 與 peek() 和 remove() 有何不同?

初學者很容易混淆這三個不同的概念,因為它們看起來非常相似。假設“q”是一個隊列,那麼它們的不同之處如下:
  • q.poll():刪除並檢索隊列的頭部
  • q.peek():不刪除但僅檢索/返回隊列的頭部
  • q.remove():刪除並檢索隊列的頭部
所以看起來remove()poll()是完全一樣的。它們在正常情況下的工作方式相同。但是當隊列為空時,remove()拋出NoSuchElementException,而 poll 返回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() 返回:週日 工作日: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] remove() 返回:週日更新![週一、週二、週三、週四、週五、週六] remove() 返回:週一更新![星期二、星期三、星期四、星期五、星期六] remove() 返回:星期二 remove() 返回:星期三 remove() 返回:星期四 remove() 返回:星期五 天更新![星期六] poll() 返回:星期六日期已更新![] poll() 返回:在 java.util.LinkedList.removeFirst(LinkedList.java:270) 在 java.util.LinkedList.remove(LinkedList.java:
正如您在調用peek() 後看到的那樣,工作日保持不變。當我們使用remove()poll()時,隊列的大小隨著返回頭部而減少 1。此外,當我們在空隊列中調用remove()時拋出java.util.NoSuchElementException ,而使用poll()則不會拋出此類異常。

結論

最後,我們希望您熟悉隊列的poll()方法的使用和工作。但是,如果有任何困惑,您可以隨時返回此處進行諮詢。快樂編碼!
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION