Java中的双端队列
出队是一个双端队列,可以从任一端添加或删除数据元素。Java中的出队是使用java.util.Deque接口实现的,该接口是java.util.Queue接口的子类型。
演示出队方法的程序如下:
示例
import java.util.*; public class Example { public static void main(String[] args) { Deque<String> d = new LinkedList<String>(); d.add("5"); d.addFirst("1"); d.addLast("9"); d.push("7"); d.offer("8"); d.offerFirst("6"); d.offerLast("2"); System.out.println("双端队列是: " + d); System.out.print("\n使用标准迭代器出列: "); Iterator i = d.iterator(); while (i.hasNext()) { System.out.print(i.next() + " "); } System.out.println("\n\n使用peek, deque容器的头元素是: " + d.peek()); System.out.println("在peek之后的队列: " + d); System.out.println("\n使用pop,从deque头部移除的元素是: " + d.pop()); System.out.println("在pop之后的deque: " + d); System.out.println("\ndeque包含元素8吗: " + d.contains("8")); d.removeFirst(); d.removeLast(); System.out.println("\n移除第一个和最后一个元素后的Deque是: " + d); } }
输出结果
双端队列是: [6, 7, 1, 5, 9, 8, 2] 使用标准迭代器出列: 6 7 1 5 9 8 2 使用peek, deque容器的头元素是: 6 在peek之后的队列: [6, 7, 1, 5, 9, 8, 2] 使用pop,从deque头部移除的元素是: 6 在pop之后的deque: [7, 1, 5, 9, 8, 2] deque包含元素8吗: true 移除第一个和最后一个元素后的Deque是: [1, 5, 9, 8]
现在让我们了解上面的程序。
各种功能用于对双端队列执行操作。add(),offer(),offerLast()以及addLast()方法增加了双端队列尾的元素。addFirst(),offerFirst()以及push()方法增加了双端队列头部的元素。演示此过程的代码段如下所示。
d.add("5"); d.addFirst("1"); d.addLast("9"); d.push("7"); d.offer("8"); d.offerFirst("6"); d.offerLast("2");
然后打印双端队列。之后,使用标准迭代器将其打印。演示此过程的代码段如下所示。
System.out.println("双端队列是: " + d); System.out.print("\n使用标准迭代器出列: "); Iterator i = d.iterator(); while (i.hasNext()) { System.out.print(i.next() + " "); }
然后peek()用于查看双端队列顶部的元素,pop()用于删除双端队列顶部的元素。证明这一点的代码片段如下所示-
System.out.println("\n\n使用peek, deque容器的头元素是: " + d.peek()); System.out.println("在peek之后的队列: " + d); System.out.println("\n使用pop,从deque头部移除的元素是: " + d.pop()); System.out.println("在pop之后的deque: " + d);
contains()函数用于检查双端队列中是否包含元素。removeFirst()和removeLast()方法分别除去双端队列的第一个和最后一个元素。证明这一点的代码片段如下所示-
System.out.println("\ndeque包含元素8吗: " + d.contains("8")); d.removeFirst(); d.removeLast(); System.out.println("\n移除第一个和最后一个元素后的Deque是: " + d);