1 如何理解“雙端隊(duì)列”
Deque 全稱為double ended queue肛真,即雙向隊(duì)列吞瞪,相對于隊(duì)列它提供了更強(qiáng)大的功能.它允許在隊(duì)列兩側(cè)插入或刪除元素。因此deque實(shí)現(xiàn)不僅僅能能作為隊(duì)列【先進(jìn)先出FIFO(first in first out)】使用扎拣,還能作為椧廊【后入先出LIFO(last in first out)使用】。
2 Java中雙端隊(duì)列“接口”
Deque中定義的方法主要分為四部分齐苛,第一部分就如Deque定義所言翘盖,提供兩側(cè)插入或刪除的方法。第二部分是繼承自Queue的實(shí)現(xiàn)凹蜂。第三部分表示如果要基于此實(shí)現(xiàn)一個(gè)Stack馍驯,需要實(shí)現(xiàn)的方法。最后一部分是繼承自Collection的方法
提供兩側(cè)插入或刪除的方法
//在隊(duì)首添加元素
void addFirst(E e);
//在隊(duì)首添加元素
boolean offerFirst(E e);
//在隊(duì)尾添加元素
void addLast(E e);
boolean offerLast(E e);
//刪除隊(duì)首元素
E removeFirst();
E pollFirst();
//刪除隊(duì)尾元素
E removeLast();
E pollLast();
//獲取隊(duì)首元素
E getFirst();
E peekFirst();
//獲取隊(duì)尾元素
E getLast();
E peekLast();
//刪除隊(duì)列中第一個(gè)發(fā)現(xiàn)o元素
boolean removeFirstOccurrence(Object o);
//刪除隊(duì)列中最后一個(gè)發(fā)現(xiàn)o元素
boolean removeLastOccurrence(Object o);
和隊(duì)列一樣這里添加玛痊、刪除汰瘫、查詢這些個(gè)操作都提供了兩種形式。在操作失敗時(shí)直接拋出異常擂煞,而另一種則返回一個(gè)特殊的值
image
繼承自Queue的方法
Deque 繼承了父接口Queue所有方法混弥,并對所有接口方法都可以通過自身定義兩側(cè)插入或刪除的方法來實(shí)現(xiàn).其對應(yīng)關(guān)系如下:
image
對應(yīng)源碼
public boolean add(E e) {
addLast(e);
return true;
}
實(shí)現(xiàn)Stack接口
雖然Deque提供的addFirst(),removeFirst()方法足以實(shí)現(xiàn)Stack功能对省,但Deque還是提供了針對Stack方法操作名稱相關(guān)的方法:
//與addFirst()等價(jià)
void push(E e);
//與removeFirst()等價(jià)
E pop();
繼承于Collection的方法
//順序是從隊(duì)首到隊(duì)尾
Iterator<E> iterator();
//順序是從隊(duì)尾到隊(duì)首
Iterator<E> descendingIterator();