隊列

  隊列的特色是先進先出數組

  單項隊列只能在隊尾添加元素,從隊頭刪除元素。安全

  雙向隊列的隊頭和隊尾都支持元素的入隊和出隊。數據結構

public interface Deque<E> extends Queue<E>{
  void addFirst(E e);
  void addLast(E e);

  E removeFirst();
  E removeLast();
}

  通常狀況下,Queue的實現類不容許添加null元素。由於poll(),peek()方法在異常時會返回nullspa

public interface Queue<E> extends Collection<E>{
  boolean add(E e);  //Exception
  boolean offer(E e); // return special value
  E remove();//Exception
  E poll();// return special value
  E element();//Exception
  E peek();// return special value
}

 

PriorityQueue  線程

  PriorityQueue又叫作優先級隊列,保存隊列元素的順序不是按照加入隊列的順序,而是按照隊列元素的大小進行排序的。不容許null元素。PriorityQueue使用了堆數據結構。底層使用數組保存數據。PriorityQueue元素可使用默認的天然排序或提供Comparator在隊列實例化時指定的排序方式進行排序。當PriorityQueue中沒有指定Comparator時,加入的元素必須事先了Comparable接口,不然會致使ClassCastException。code

   PriorityQueue調用默認的構造方法時,使用默認的初識容量(DEFAULT_IITIAL_CAPACITY = 11)建立一個PriorityQueue,並根據其天然順序來排序元素blog

  PriorityQueue不是線程安全的。PriorityBlockingQueue是線程安全的排序

  不容許插入null元素接口

  PriorityQueue實現插入方法(offer,poll,remove()和add方法)的時間複雜度是O(log(n)),實現remove(Object)和contains(Object)方法的時間複雜度是O(n),實現檢索方法(peek,element和size)的時間複雜度是O(1),在不須要刪除元素時,應使用peek的方式遍歷每一個元素。隊列

  iterator()職工提供的迭代器並不保證以有序的方式遍歷PriorityQueue中的元素

 

ArrayDeque

  ArrayDeque使用數組實現的Deque,底層是數組,默認長度是16。思路是引入兩個遊標,head和tail,若向隊列裏插入一個元素,就把tail向後移動。若從隊列中刪除一個元素,就把head向後移動。若tail已經指向了數組的最後一位,則把head從新指向數組的頭就能夠了。即用一個環形數組來實現隊列。ArrayDeque也是縣城不安全的。

 

  ArrayBlockingQueue在構造時須要指定容量,並能夠選擇是否須要公平性,若公平參數被設置爲true,等待時間最長的線程會優先獲得處理。

  DelayQueue是一個存放Delayed元素的無阻塞隊列,只有延遲期滿時才能從國內中提取元素。該隊列的頭部是延遲期滿後保存時間最長的Delayed元素。若延遲起都沒有滿,則隊列沒有頭部,而且poll方法返回null。當一個元素的getDelay()方法返回一個小於或等於零的值,則出現期滿,poll就能夠一出這個元素了。此隊列不容許使用null元素。放入DelayQueue的元素還要實現compareTo方法,DelayQueue使用這個來爲元素排序。

相關文章
相關標籤/搜索