原文: https://www.programiz.com/java-programming/deque

在本教程中,我们将学习Deque接口,如何使用它及其方法。

Java 集合框架的Deque接口提供双端队列的功能。 它扩展了Queue接口。


双端队列的工作原理

在常规队列中,元素是从后面添加的,而从前面删除的。 但是,在双端队列中,我们可以从前面和后面插入和删除元素。

Java `Deque`接口 - 图1


Deque实现类

为了使用Deque接口的功能,我们需要使用实现它的类:

Java `Deque`接口 - 图2


如何使用Deque

在 Java 中,我们必须导入java.util.Deque包才能使用Deque

  1. // Array implementation of Deque
  2. Deque<String> animal1 = new ArrayDeque<>();
  3. // LinkedList implementation of Deque
  4. Deque<String> animal2 = new LinkedList<>();

在这里,我们分别创建了ArrayDequeLinkedList类的对象animal1animal2。 这些对象可以使用Deque接口的功能。


Deque方法

由于Deque扩展了Queue接口,因此它继承了Queue接口的所有方法。

除了Queue接口中可用的方法外,Deque接口还包括以下方法:

  • addFirst() - 在双端队列的开头添加指定的元素。 如果双端队列已满,则引发异常。
  • addLast() - 在双端队列的末尾添加指定的元素。 如果双端队列已满,则引发异常。
  • offerFirst() - 在双端队列的开头添加指定的元素。 如果双端队列已满,则返回false
  • offerLast() - 在双端队列的末尾添加指定的元素。 如果双端队列已满,则返回false
  • getFirst() - 返回双端队列的第一个元素。 如果双端队列为空,则引发异常。
  • getLast() - 返回双端队列的最后一个元素。 如果双端队列为空,则引发异常。
  • peekFirst() - 返回双端队列的第一个元素。 如果双端队列为空,则返回null
  • peekLast() - 返回双端队列的最后一个元素。 如果双端队列为空,则返回null
  • removeFirst() - 返回并删除双端队列的第一个元素。 如果双端队列为空,则引发异常。
  • removeLast() - 返回并删除双端队列的最后一个元素。 如果双端队列为空,则引发异常。
  • pollFirst() - 返回并删除双端队列的第一个元素。 如果双端队列为空,则返回null
  • pollLast() - 返回并删除双端队列的最后一个元素。 如果双端队列为空,则返回null

双端队列作为栈数据结构

Java Collections框架的Stack类提供了栈的实现。

但是,建议使用Deque作为栈,而不是栈类。 这是因为Stack的方法是同步的。

以下是Deque接口提供的实现栈的方法:

  • push() - 在双端队列的开头添加一个元素
  • pop() - 从双端队列的开头删除元素
  • peek() - 从双端队列的开头返回一个元素

ArrayDeque类中Deque的实现

  1. import java.util.Deque;
  2. import java.util.ArrayDeque;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating Deque using the ArrayDeque class
  6. Deque<Integer> numbers = new ArrayDeque<>();
  7. // add elements to the Deque
  8. numbers.offer(1);
  9. numbers.offerLast(2);
  10. numbers.offerFirst(3);
  11. System.out.println("Deque: " + numbers);
  12. // Access elements of the Deque
  13. int firstElement = numbers.peekFirst();
  14. System.out.println("First Element: " + firstElement);
  15. int lastElement = numbers.peekLast();
  16. System.out.println("Last Element: " + lastElement);
  17. // Remove elements from the Deque
  18. int removedNumber1 = numbers.pollFirst();
  19. System.out.println("Removed First Element: " + removedNumber1);
  20. int removedNumber2 = numbers.pollLast();
  21. System.out.println("Removed Last Element: " + removedNumber2);
  22. System.out.println("Updated Deque: " + numbers);
  23. }
  24. }

输出

  1. Deque: [3, 1, 2]
  2. First Element: 3
  3. Last Element: 2
  4. Removed First Element: 3
  5. Removed Last Element: 2
  6. Updated Deque: [1]

要了解更多信息,请访问 Java ArrayDeque