1. 程式人生 > >一、佇列 Queue 入門

一、佇列 Queue 入門

一、佇列的定義

我們都知道 佇列(Queue)是一種 先進先出 (FIFO—first in first out) 的資料結構,Java中定義了 java.util.Queue介面用來表示佇列。Java中的 QueueListSet屬於同一個級別介面,它們都是繼承於 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