什麼是隊列?
顧名思義,Queue 是 Java 中一種常見的數據結構,遵循先進先出(FIFO)的插入順序。您可以很容易地將其想像成雜貨店的隊列。越早進入,越早離開。這意味著較早添加到隊列中的元素也將較早離開。隊列的第一個元素(前面)也稱為head。Queue的poll()方法是什麼?
poll() 方法允許您檢索和刪除隊列的最頂層元素(頭)。在我們的示例中,當您在上述隊列中調用 poll() 時,您將收到“1”作為結果。隊列中將只剩下 4 個元素。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():刪除並檢索隊列的頭部
示例 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()則不會拋出此類異常。
GO TO FULL VERSION