什么是队列?
顾名思义,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