ArrayBlockingQueue是Java中的一个类,它实现了BlockingQueue接口。 ArrayBlockingQueue 类及其迭代器实现了 Collection 和 Iterator 接口的所有可选方法。 ArrayBlockingQueue 是一个由数组支持的有界 BlockingQueue。这里,有界意味着队列的大小是有限且固定的。一旦创建就不能增长或缩小队列的大小。如果试图将一个元素插入到一个完整的队列中,那么它将导致操作阻塞。同样,如果尝试从空队列中获取元素,则操作也会被阻塞。 ArrayBlockingQueue 将 Queue 中的元素内部存储在 FIFO 中(先进先出) 命令。队列头部或前面的元素是该队列中所有元素中最旧的元素。该队列尾部的元素是该队列所有元素的最新元素。新元素总是插入到队列的末尾或末尾,检索操作获取队列头的元素。
ArrayBlockingQueue 实现:
Java
// Java program to demonstrate 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(1);
abq.add(2);
abq.add(3);
// print queue
System.out.println("ArrayBlockingQueue:" + abq);
}
}
Java
// Java program to demonstrate 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(10);
de_que.add(20);
de_que.add(30);
// print queue
System.out.println("ArrayDeque:" + de_que);
}
}
ArrayBlockingQueue:[1, 2, 3]
ArrayDeque是Java中的一个类,它实现了 Queue 和 Deque。它可以从两侧动态重新调整大小。这是一种特殊的数组,它可以增长并允许用户从队列的两侧添加或删除元素。它也被称为数组双端队列或数组甲板。
ArrayDeque 的几个重要特性如下:
- ArrayDeque 没有容量限制,它们会根据需要增长以支持使用。
- 它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDeque 不支持多线程并发访问。
- ArrayDeque 中禁止使用空元素。
- 当用作堆栈时,ArrayDeque 类可能比 Stack 更快。
- 当用作队列时,ArrayDeque 类可能比 LinkedList 更快。
ArrayDeque 实现:
Java
// Java program to demonstrate 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(10);
de_que.add(20);
de_que.add(30);
// print queue
System.out.println("ArrayDeque:" + de_que);
}
}
ArrayDeque:[10, 20, 30]
ArrayBlockingQueue 和 ArrayDeque 的区别:
S.NO. | ArrayBlockingQueue | ArrayDeque |
---|---|---|
1. |
ArrayBlockingQueue implements the BlockingQueue interface. |
ArrayDeque implements the Deque interface. |
2. |
It is a fixed size array queue. Therefore, we cannot grow and shrink the size of an array once we created. |
It is a resizable array queue. Therefore, we can grow and shrink the size of the array. |
3. |
Able to add or remove the elements from only one side of the queue. |
Able to add or remove the elements from both sides of the queue. |
4. |
ArrayBlockingQueue is thread-safe. |
ArrayDeque is not thread-safe. |
5. |
ArrayBlockingQueue class is not faster than the ArrayDeque class. |
ArrayDeque class is faster than the ArrayBlockingQueue class. |