2.10.1 什么是Queue
正如資料結構中描述,queue是一種先進先出的資料結構,也就是first in first out,可以將queue看作一個只可以從某一段放元素進去的一個容器,取元素只能從另一端取,整個機制如下圖所示,不過需要注意的是,佇列并沒有規定是從哪一端插入,從哪一段取出,

2.10.2 什么是Deque
Deque英文全稱是Double ended queue,也就是俗稱的雙端佇列,就是說對于這個佇列容器,既可以從頭部插入也可以從尾部插入,既可以從頭部獲取,也可以從尾部獲取,其機制如下圖所示,

2.10.3 Java中的Queue介面
此處需要注意,Java中的佇列明確有從尾部插入,頭部取出,所以Java中queue的實作都是從頭部取出,
package java.util;
public interface Queue<E> extends Collection<E> {
//集合中插入元素
boolean add(E e);
//佇列中插入元素
boolean offer(E e);
//移除元素,當集合為空,拋出例外
E remove();
//移除佇列頭部元素并回傳,如果為空,回傳null
E poll();
//查詢集合第一個元素,如果為空,拋出例外
E element();
//查詢佇列中第一個元素,如果為空,回傳null
E peek();
}
| Queue介面方法 | 作用 |
|---|---|
| boolean offer(E e) | 往佇列中插入元素 |
| E poll() | 佇列中移除元素,并回傳該元素 |
| E peek() | 獲取佇列頭部元素,但不做修改 |
Java queue常常使用的方法如表格所示,對于表格中介面和表格中沒有的介面方法區別為:佇列的操作不會因為佇列為空拋出例外,而集合的操作是佇列為空拋出例外,
2.10.4 Deque介面
package java.util;
public interface Deque<E> extends Queue<E> {
//deque的操作方法
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介面方法和collection介面方法
}
和Queue中的方法一樣,方法名多了First或者Last,First結尾的方法即從頭部進行操作,Last即從尾部進行操作,
2.10.5 Queue,Deque的實作類
Java中關于Queue的實作主要用的是雙端佇列,畢竟操作更加方便自由,Queue的實作有PriorityQueue,Deque在java.util中主要有ArrayDeque和LinkedList兩個實作類,兩者一個是基于陣列的實作,一個是基于鏈表的實作,在之前LinkedList文章中也提到過其是一個雙向鏈表,在此基礎之上實作了Deque介面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251745.html
標籤:java
