版权声明:分享知识是一种快乐,愿你我都能共同成长! https://blog.csdn.net/qidasheng2012/article/details/83302865
一、队列的定义
我们都知道 队列(Queue)是一种 先进先出 (FIFO—first in first out) 的数据结构,Java中定义了java.util.Queue
接口用来表示队列。Java中的
Queue
与
List
、
Set
属于同一个级别接口,它们都是继承于
Collection
接口。
Java中还定义了一种双端队列java.util.Deque
,我们常用的LinkedList
就是实现了Deque
接口。
下面我们看一下类的定义:
Queue & Deque
public interface Queue<E> extends Collection<E> {
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
}
public interface Deque<E> extends Queue<E> {
void addFirst(E e);
void addLast(E e);
boolean offerFirst(E e);
boolean offerLast(E e);
E removeFirst();
E removeLast();
E pollFirst();
E pollLast();
E getFirst();
E getLast();
E peekFirst();
E peekLast();
boolean removeFirstOccurrence(Object o);
boolean removeLastOccurrence(Object o);
// *** Queue methods ***
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
// *** Stack methods ***
void push(E e);
E pop();
// *** Collection methods ***
boolean remove(Object o);
boolean contains(Object o);
public int size();
Iterator<E> iterator();
Iterator<E> descendingIterator();
}
二、队列的实现
Java中对于队列的实现分为 非阻塞 和 阻塞 两种1 非阻塞队列分为如下:
- LinkedList
LinkedList
是双相链表结构,在添加和删除元素时具有比ArrayList
更好的性能。但在 Get 与 Set 方面弱于ArrayList
。当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比。 - PriorityQueue
PriorityQueue维护了一个有序列表,存储到队列中的元素会按照自然顺序排列。当然,我们也可以给它指定一个实现了
java.util.Comparator
接口的排序类来指定元素排列的顺序。 - ConcurrentLinkedQueue
ConcurrentLinkedQueue
是基于链接节点的并且线程安全的队列。因为它在队列的尾部添加元素并从头部删除它们,所以只要不需要知道队列的大小ConcurrentLinkedQueue
对公共集合的共享访问就可以工作得很好。收集关于队列大小的信息会很慢,需要遍历队列。
2 阻塞队列(BlockingQueue):
线程安全阻塞队列 BlockingQueue 入门:https://blog.csdn.net/qidasheng2012/article/details/83302265