雙端隊列或deque擴展隊列以允許元件從兩端插入和移除。
Deque 類的實例表示雙端隊列。 Deque 接口擴展了 Queue 接口。
它聲明了方便所有操作的其他方法對于頭部以及尾部的隊列。它可以用作FIFO隊列或LIFO隊列。
ArrayDeque和LinkedList類是Deque接口的兩個實現類。
ArrayDeque 類由數組支持,而 LinkedList 類由鏈表支持。
如果您使用Deque作為堆棧,則應該使用 ArrayDeque 作為 Deque 實現。
如果使用 Deque 作為FIFO隊列, LinkedList
以下代碼顯示如何使用 Deque 作為FIFO隊列。
import java.util.Deque;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Deque<String> deque = new LinkedList<>();
deque.addLast("Oracle");
deque.offerLast("Java");
deque.offerLast("CSS");
deque.offerLast("XML");
System.out.println("Deque: " + deque);
// remove elements from the Deque until it is empty
while (deque.peekFirst() != null) {
System.out.println("Head Element: " + deque.peekFirst());
deque.removeFirst();
System.out.println("Removed one element from Deque");
System.out.println("Deque: " + deque);
}
// the Deque is empty. Try to call its peekFirst(),
// getFirst(), pollFirst() and removeFirst() methods
System.out.println("deque.isEmpty(): " + deque.isEmpty());
System.out.println("deque.peekFirst(): " + deque.peekFirst());
System.out.println("deque.pollFirst(): " + deque.pollFirst());
String str = deque.getFirst();
System.out.println("deque.getFirst(): " + str);
str = deque.removeFirst();
System.out.println("deque.removeFirst(): " + str);
}
}
上面的代碼生成以下結果。
例子
以下代碼顯示如何使用Deque作為堆棧(或LIFO隊列)。
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) {
// Create a Deque and use it as stack
Deque<String> deque = new ArrayDeque<>();
deque.push("Oracle");
deque.push("HTML");
deque.push("CSS");
deque.push("XML");
System.out.println("Stack: " + deque);
// remove all elements from the Deque
while (deque.peek() != null) {
System.out.println("Element at top: " + deque.peek());
System.out.println("Popped: " + deque.pop());
System.out.println("Stack: " + deque);
}
System.out.println("Stack is empty: " + deque.isEmpty());
}
}
上面的代碼生成以下結果。