📜  Java中的 PriorityBlockingQueue offer() 方法

📅  最后修改于: 2022-05-13 01:55:26.588000             🧑  作者: Mango

Java中的 PriorityBlockingQueue offer() 方法

1. offer(E e) 方法

PriorityBlockingQueue 的offer(E e)方法将作为参数传递的元素 e插入到此 PriorityBlockingQueue 中。此方法将元素插入到此 PriorityBlockingQueue 中。由于 PriorityBlockingQueue 是无界的,所以这个方法永远不会被阻塞。

句法:

public boolean offer(E e)

范围:
此方法接受一个参数e ,它表示我们要在此 PriorityBlockingQueue 中插入的元素 e。

回报:
如果插入成功,此方法返回布尔响应 true。

异常:此方法引发以下异常。

  • ClassCastException – 如果指定的元素不能与根据 PriorityBlockingQueue 的排序当前在优先级队列中的元素进行比较。
  • NullPointerException – 如果元素为空

下面的程序说明了 PriorityBlockingQueue 的 offer() 方法:

示例 1:演示 PriorityBlockingQueue 上的 offer() 方法以添加数字列表的程序。

// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
  
import java.util.concurrent.PriorityBlockingQueue;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
  
        // create object of PriorityBlockingQueue
        PriorityBlockingQueue PrioQueue
            = new PriorityBlockingQueue(capacityOfQueue);
  
        // Add numbers to PriorityBlockingQueue using offer()
        PrioQueue.offer(35658786);
        PrioQueue.offer(5278367);
        PrioQueue.offer(74381793);
        PrioQueue.offer(87625142);
  
        // print elements of PriorityBlockingQueue
        System.out.println("Queue Contains:");
        System.out.println(PrioQueue.toString());
    }
}
输出:
Queue Contains:
[5278367, 35658786, 74381793, 87625142]

示例 2:当我们尝试将 null 添加到 PriorityBlockingQueue 时,演示由 offer() 方法引发的异常的程序。

// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
  
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
  
        // create object of PriorityBlockingQueue which contains
        // name of students
        PriorityBlockingQueue names
            = new PriorityBlockingQueue(capacityOfQueue);
  
        // Add names of students of girls college
        names.offer("Joyita");
        names.offer("Priyanka");
  
        // try to insert null value in offer method
        try {
            names.offer(null);
        }
        catch (Exception e) {
            // print error details
            System.out.println("Exception Thrown: " + e);
        }
    }
}
输出:
Exception Thrown: java.lang.NullPointerException

2. offer(E e, long timeout, TimeUnit unit) 方法

PriorityBlockingQueue 的offer(E e, long timeout, TimeUnit unit)方法将作为参数传递的元素 e插入到此 PriorityBlockingQueue 中。此方法将元素插入到此 PriorityBlockingQueue 中。由于 PriorityBlockingQueue 是无界的,所以这个方法永远不会被阻塞,并且忽略 timeout 和 timeUnit 参数。这个方法是从优先BlockingQueue 的超类继承的,它是 BlockingQueue 类但是由于priorityBlockingQueue 从不阻塞要插入的新元素,所以这个方法继承自超类在逻辑上与 offer(E e) 方法相同。

句法:

offer(E e, long timeout, TimeUnit unit)

参数:该方法接受三个参数

  1. e : 要插入 PriorityBlockingQueue 的元素。
  2. timeout :这个参数被忽略,因为队列从不阻塞新元素的插入。
  3. unit :这个参数也被忽略了,因为 queue 永远不会阻塞新元素的插入。

返回:如果插入成功,此方法返回布尔响应 true。

异常:此方法引发以下异常。

  • ClassCastException – 如果指定的元素不能与根据 PriorityBlockingQueue 的排序当前在优先级队列中的元素进行比较。
  • NullPointerException – 如果元素为空

下面的程序说明了 PriorityBlockingQueue 的 offer(E e, long timeout, TimeUnit unit) 方法:

示例 1:演示 PriorityBlockingQueue 上的 offer(E e, long timeout, TimeUnit unit) 方法添加数字列表的程序。

// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
  
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
  
        // create object of PriorityBlockingQueue
        PriorityBlockingQueue PrioQueue
            = new PriorityBlockingQueue(capacityOfQueue);
  
        // Add 3 elements to PriorityBlockingQueue using
        // offer(Element e, long timeout, TimeUnit unit)
        System.out.println("adding 1234 "
                           + PrioQueue.offer(1234,
                                             5, TimeUnit.SECONDS));
        System.out.println("adding 2345 "
                           + PrioQueue.offer(2345,
                                             5, TimeUnit.SECONDS));
        System.out.println("adding 3456 "
                           + PrioQueue.offer(3456,
                                             5, TimeUnit.SECONDS));
  
        // print elements of PriorityBlockingQueue
        System.out.println("Queue Contains:");
        System.out.println(PrioQueue.toString());
    }
}
输出:
adding 1234 true
adding 2345 true
adding 3456 true
Queue Contains:
[1234, 2345, 3456]

参考:

  • https://docs.oracle.com/javase/8/docs/api/java Java
  • https://docs.oracle.com/javase/8/docs/api/java Java