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);