Java 中的队列 offer 与 add

Rashmi Patidar 2023年10月12日
Java 中的队列 offer 与 add

队列是一种数据结构,允许用户以先进先出的方式添加元素。在 Java 中,queuejava.util 包中的一个接口。它是一种线性结构,允许数据结构中的元素有序。

该系列从两端或后部和前端打开。该属性使对象能够在前端添加和从后端删除。

该结构提供了多种方法,其描述在下面的代码中。

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

public class Main {
  public static void main(String[] args) {
    Queue queue = new ArrayBlockingQueue(2);
    boolean value = false;
    value = queue.offer(1);
    System.out.println("Offer Returned Value: " + value);
    value = queue.offer(2);
    System.out.println("Offer Returned Value: " + value);
    value = queue.offer(3);
    System.out.println("Offer Returned Value: " + value);

    Queue blockingQueue = new ArrayBlockingQueue(2);
    blockingQueue.add(5);
    blockingQueue.add(10);
    blockingQueue.add(15);
  }
}

上面的代码块包含 addoffer 方法的两种实现,并提供了两者之间的区别。上面的代码块使用 new 关键字实例化了一个 queue 实例。

第一条语句创建一个 ArrayBlockingQueue 的对象,其大小为二的固定容量和默认访问策略。它需要一个大小值作为参数。如果容量小于 1,它会抛出 IllegalArgumentException

offer 方法在检查容量限制后将指定的元素插入到这个队列中。该函数将参数作为要添加的元素。如果将值添加到队列的末尾,则此函数返回 true;否则,false

如果指定元素的类阻止它被添加到它,它会抛出一个 ClassCastException。如果指定的值为 null,则调用 NullPointerException。如果某些元素属性阻止将其添加到队列中,则会抛出 IllegalArgumentException

offer 函数旁边的 print 语句打印布尔值 truefalse。同样,一个新的 ArrayBlockingQueue 被实例化,容量为 two。它会追加直到两次成功插入,然后抛出异常跟踪。

此方法将参数作为要添加到队列的元素。每次添加成功后,它都会返回 true;否则,如果无法添加值,它会抛出 IllegalStateException

如果指定元素的类阻止它添加,则抛出 ClassCastExceptionNullPointerException(如果指定值为 null),IllegalArgumentException(如果此元素的属性阻止将其添加到队列中)。

两种方法之间的唯一区别是,如果进行添加,offer 方法会抛出 truefalse。与此相反,当队列中不可能有更多添加时,add 方法会抛出异常。

下面是上面代码块的结果输出。

Offer Returned Value: true
Offer Returned Value: true
Offer Returned Value: false
Exception in thread "main" java.lang.IllegalStateException: Queue full
    at java.util.AbstractQueue.add(AbstractQueue.java:98)
    at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)
    at F11.QueueAddVsOffer.main(QueueAddVsOffer.java:25)
作者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

相关文章 - Java Queue