一、佇列 Queue 入門
阿新 • • 發佈:2018-11-02
一、佇列的定義
我們都知道 佇列(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