CodeGym /Java 博客 /随机的 /Java 中的队列 poll() 方法及其示例
John Squirrels
第 41 级
San Francisco

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

已在 随机的 群组中发布

什么是队列?

顾名思义,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