Java 双端队列
2018-02-20 02:57 更新
Java集合教程 - Java双端队列
双端队列或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()); } }
上面的代码生成以下结果。
以上内容是否对您有帮助:
更多建议: