HOWTO · Java
Java 中的队列 offer 与 add
本文介绍了 Java 中 queue offer 和 add 方法的区别。
本页内容
队列是一种数据结构,允许用户以先进先出的方式添加元素。在 Java 中,queue 是 java.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);
}
}
上面的代码块包含 add 和 offer 方法的两种实现,并提供了两者之间的区别。上面的代码块使用 new 关键字实例化了一个 queue 实例。
第一条语句创建一个 ArrayBlockingQueue 的对象,其大小为二的固定容量和默认访问策略。它需要一个大小值作为参数。如果容量小于 1,它会抛出 IllegalArgumentException。
offer 方法在检查容量限制后将指定的元素插入到这个队列中。该函数将参数作为要添加的元素。如果将值添加到队列的末尾,则此函数返回 true;否则,false。
如果指定元素的类阻止它被添加到它,它会抛出一个 ClassCastException。如果指定的值为 null,则调用 NullPointerException。如果某些元素属性阻止将其添加到队列中,则会抛出 IllegalArgumentException。
offer 函数旁边的 print 语句打印布尔值 true 或 false。同样,一个新的 ArrayBlockingQueue 被实例化,容量为 two。它会追加直到两次成功插入,然后抛出异常跟踪。
此方法将参数作为要添加到队列的元素。每次添加成功后,它都会返回 true;否则,如果无法添加值,它会抛出 IllegalStateException。
如果指定元素的类阻止它添加,则抛出 ClassCastException。NullPointerException(如果指定值为 null),IllegalArgumentException(如果此元素的属性阻止将其添加到队列中)。
两种方法之间的唯一区别是,如果进行添加,offer 方法会抛出 true 或 false。与此相反,当队列中不可能有更多添加时,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)