Java中的PriorityBlockingQueue poll()方法

Java中的PriorityBlockingQueue poll()方法

1. poll()方法

PriorityBlockingQueue的 poll() 方法会从队列头部检索并移除元素。如果队列为空,此方法将返回null。

语法:

public E poll()

返回值: 此方法将返回PriorityBlockingQueue头部的元素,如果此队列为空,则返回null。

以下程序为PriorityBlockingQueue的poll()方法示例:

示例1: 演示PriorityBlockingQueue的poll()方法,从数字列表中删除一个元素。

// Java使用PriorityBlockingQueue演示poll()
//方法
  
import java.util.concurrent.PriorityBlockingQueue;
  
public class GFG {
    public static void main(String[] args)
    {
  
        //定义PriorityBlockingQueue的容量
        int capacityOfQueue  = 5;
  
        //创建PriorityBlockingQueue对象
        PriorityBlockingQueue<Integer> PrioQueue
            = new PriorityBlockingQueue<Integer>(capacityOfQueue);
  
        //向PriorityBlockingQueue中添加数字
        PrioQueue.offer(35658786);
        PrioQueue.offer(5278367);
        PrioQueue.offer(74381793);
        PrioQueue.offer(87625142);
  
        //使用poll()方法从头部删除数字并打印已删除数字
        int removedItem = PrioQueue.poll();
  
        //打印详细信息
        System.out.println("删除的元素:" + removedItem);
        System.out.println("队列现在包含:");
        System.out.println(PrioQueue.toString());
    }
}
删除的元素:5278367
队列现在包含:
[35658786, 87625142, 74381793]

示例2: 演示PriorityBlockingQueue的poll()方法,从字符串值列表中删除一个元素,如果列表为空则返回null。

// Java使用PriorityBlockingQueue演示poll()
//方法
  
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        //定义PriorityBlockingQueue的容量
        int capacityOfQueue  = 5;
  
        //创建包含学生姓名的PriorityBlockingQueue对象
        PriorityBlockingQueue<String> names
            = new PriorityBlockingQueue<String>(capacityOfQueue);
  
        //添加女子学院学生的姓名
        names.offer("Joyita");
        names.offer("Priyanka");
  
        //从名字列表中移除两个名字并打印之前的名字
        String removedName1 = names.poll();
        String removedName2 = names.poll();
  
        //打印详细信息
        System.out.println("已删除的姓名1:" + removedName1);
        System.out.println("已删除的姓名2:" + removedName2);
        System.out.println("队列现在包含:");
        System.out.println(names.toString());
  
        //尝试从空的PriorityBlockingQueue中删除
        String removedName3 = names.poll();
        System.out.println("已删除的姓名3:" + removedName3);
    }
}
已删除的姓名1:Joyita
已删除的姓名2:Priyanka
队列现在包含:
[]
已删除的姓名3:null

2. poll(long timeout, TimeUnit unit)方法

poll(long timeout, TimeUnit unit) 方法从 PriorityBlockingQueue 的头部检索并删除元素。如果 PriorityBlockingQueue 为空,则它会等待一个指定的时间,直到有一个元素变为可用。等待时间和时间单位作为方法的参数给出。

语法:

public E poll(long timeout, TimeUnit unit) throws InterruptedException

参数:
此方法接受两个参数:

  1. timeout(long) :在单位单位内等待多长时间后放弃等待。
  2. 单位(TimeUnit) :一个 TimeUnit,用于确定如何解释超时参数。

返回值: 此方法返回此 PriorityBlockingQueue 的头部元素,如果在指定的等待时间过去之前没有元素可用,则返回 null。

异常: 此方法仅抛出一种异常 InterruptedException --如果在等待时被中断。

下面的程序演示了 PriorityBlockingQueue 的 poll(long timeout, TimeUnit unit) 方法:

例 1: 演示 poll(long timeout, TimeUnit unit) 方法从一个数字列表中删除列表元素。

// Java Program Demonstrate poll(long timeout, TimeUnit unit)
// method of PriorityBlockingQueue
  
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
  
public class GFG {
    public static void main(String[] args)
        throws InterruptedException
    {
  
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
  
        // create object of PriorityBlockingQueue
        PriorityBlockingQueue<Integer> PrioQueue
            = new PriorityBlockingQueue<Integer>(capacityOfQueue);
  
        // Add numbers to PriorityBlockingQueue
        PrioQueue.offer(35658786);
        PrioQueue.offer(5278367);
  
        // Try to poll  elements from PriorityBlockingQueue
        System.out.println("Removed Number: "
                           + PrioQueue.poll(10, TimeUnit.SECONDS));
        System.out.println("List Contains" + PrioQueue);
  
        System.out.println("Removed Number: "
                           + PrioQueue.poll(10, TimeUnit.SECONDS));
        System.out.println("List Contains" + PrioQueue);
  
        System.out.println("Removed Number: "
                           + PrioQueue.poll(10, TimeUnit.SECONDS));
        System.out.println("List Contains" + PrioQueue);
    }
}
Removed Number: 5278367
List Contains[35658786]
Removed Number: 35658786
List Contains[]
Removed Number: null
List Contains[]

参考:

  • https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html#poll–
  • https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html# poll-long-java.util.concurrent.TimeUnit-

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程