天天看點

Queue與Deque(隊列與雙端隊列)

一.Java中的隊列

  • 隊列可以讓人們有效地在尾部添加一個元素,在頭部删除一個元素。有兩個端頭的隊列,即雙端隊列,可以讓人們有效地在頭部和尾部同時添加或删除元素。不支援在隊列中間插入元素。
  • 在Java SE6中引入了

    Deque

    接口,并由

    ArrayDeque

    LinkedList

    類實作。這兩個類都提供了雙端隊列,而且在必要時可以增加隊列的長度。

二.常見的接口與類

  • Queue
//如果隊列沒有滿,将給定的元素添加到這個隊列尾部并傳回true。如果隊列滿了,将抛出IllegalStateException
boolean add(E element)
//如果隊列沒有滿,将給定的元素添加到這個隊列尾部并傳回true。如果隊列滿了,将傳回false
boolean offer(E element)
//如果隊列不空,删除并傳回這個隊列頭部的元素。如果隊列是空,将抛出NoSuchElementException
E remove()
//如果隊列不空,删除并傳回這個隊列頭部的元素。如果隊列是空,傳回null
E poll()
//如果隊列不空,傳回這個隊列頭部元素,但不删除。如果隊列為空,将抛出NoSuchElementException
E element()
//如果隊列不空,傳回這個隊列頭部元素,但不删除。如果隊列為空,傳回null
E peek()
           
  • Deque
void addFirst(E element)
void addLast(E element)
boolean offerFirst(E element)
boolean offerLast(E element)
//将給定的對象添加到雙端隊列的頭部或尾部。如果滿了,前面兩個方法将抛出IllegalStateException,而後面兩個方法傳回false。

E removeFirst()
E removeLast()
E pollFirst()
E pollLast()
//如果隊列不空,删除并傳回隊列頭部(尾部)的元素。
//如果隊列為空,前面兩個方法将抛出一個NoSuchElementException,而後面兩個方法傳回null。

E getFirst()
E getLast()
E peekFirst()
E peekLast()
//如果隊列非空,傳回隊列頭部的元素,但不删除。
//如果隊列為空,前面兩個方法将抛出一個NoSuchElementException,而後面兩個方法傳回null
           
  • 實作類有ArrayDeque。