ArrayBlockingQueue
是Java中实现BlockingQueue
接口的一个类。ArrayBlockingQueue
类和它的迭代器实现了Collection
和Iterator
接口的所有可选方法。ArrayBlockingQueue
是一个有边界的BlockingQueue,由一个数组支持。这里,有界意味着队列的大小是有限的和固定的。一旦创建,就不能扩大或缩小队列的大小。如果试图在一个满的队列中插入一个元素,那么它将导致操作被阻塞。同样地,如果试图从一个空队列中取出一个元素,那么操作也会被阻塞。ArrayBlockingQueue
按照FIFO(先进先出)的顺序在内部存储队列中的元素。位于队列头部或前端的元素是这个队列中所有元素中最老的元素。队列尾部的元素是这个队列中所有元素中最新的元素。新的元素总是插在队列的末端或尾部,检索操作获得队列头部的元素。
ArrayBlockingQueue实现代码 –
import java.util.concurrent.ArrayBlockingQueue;
public class ArrayBlockingQueueDemo {
public static void main(String[] args)
{
// define capacity of ArrayBlockingQueue
int capacity = 15;
// create object of ArrayBlockingQueue using ArrayBlockingQueue constructor
ArrayBlockingQueue abq
= new ArrayBlockingQueue(capacity);
// add numbers
abq.add(11);
abq.add(22);
abq.add(33);
// print queue
System.out.println("ArrayBlockingQueue:" + abq);
}
}
运行结果:
ArrayBlockingQueue:[11, 22, 33]
ArrayDeque
是Java中的一个类,同时实现了Queue和Deque
。它可以从两边动态地调整大小。这是一种特殊的数组,可以增长,并允许用户从队列的两边添加或删除一个元素。它也被称为数组双端队列或Array Deck。
ArrayDeque的几个重要特点如下:
ArrayDeque的实现 –
import java.util.*;
public class ArrayDequeDemo {
public static void main(String[] args)
{
// Initializing an deque
Deque de_que = new ArrayDeque(10);
// add numbers
de_que.add(110);
de_que.add(210);
de_que.add(310);
// print queue
System.out.println("ArrayDeque:" + de_que);
}
}
运行结果:
ArrayDeque:[110, 210, 310]
ArrayBlockingQueue和ArrayDeque之间的区别 –
编号 | ArrayBlockingQueue | ArrayDeque |
---|---|---|
1 | ArrayBlockingQueue实现了BlockingQueue接口。 | ArrayDeque实现了Deque接口。 |
2 | ArrayBlockingQueue是一个固定大小的数组队列,一旦创建了数组,就不能增长和缩小数组的大小。 | ArrayDeque是一个可调整大小的数组队列。因此,我们可以增长和缩减数组的大小。 |
3 | ArrayBlockingQueue能够从队列的一侧添加或删除元素。 | ArrayDeque能够从队列的两边添加或删除元素。 |
4 | ArrayBlockingQueue是线程安全的。 | ArrayDeque不是线程安全的。 |
5 | ArrayBlockingQueue类不比ArrayDeque类快。 | ArrayDeque类比ArrayBlockingQueue类快。 |