跳到主要内容

Java Deque 接口

提示
  1. 双端队列功能:Java 中的 Deque 接口提供双端队列功能,扩展了 Queue 接口,允许在队列的前端和后端插入和移除元素。
  2. 实现类和使用Deque 通过 ArrayDequeLinkedList 实现,需要导入 java.util.Deque 包以使用其功能。
  3. 方法和栈实现Deque 继承了 Queue 的所有方法,并增加了特有方法如 addFirst()addLast()。它也被推荐用作栈的替代,提供 push(), pop(), 和 peek() 方法。

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

Deque 的工作原理

在常规队列中,元素从后端添加并从前端移除。然而,在双端队列中,我们可以从前端和后端插入和移除元素

双端队列数据结构的工作原理

实现 Deque 的类

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

ArrayDeque 和 Linkedlist 实现 Deque

如何使用 Deque?

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

// ArrayDeque 的 Array 实现
Deque<String> animal1 = new ArrayDeque<>();

// LinkedList 的 Deque 实现
Deque<String> animal2 = new LinkedList<>();

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

Deque 的方法

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

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

  • addFirst() - 在 deque 的开始处添加指定元素。如果 deque 已满,则抛出异常。
  • addLast() - 在 deque 的末尾添加指定元素。如果 deque 已满,则抛出异常。
  • offerFirst() - 在 deque 的开始处添加指定元素。如果 deque 已满,则返回 false
  • offerLast() - 在 deque 的末尾添加指定元素。如果 deque 已满,则返回 false
  • getFirst() - 返回 deque 的第一个元素。如果 deque 为空,则抛出异常。
  • getLast() - 返回 deque 的最后一个元素。如果 deque 为空,则抛出异常。
  • peekFirst() - 返回 deque 的第一个元素。如果 deque 为空,则返回 null
  • peekLast() - 返回 deque 的最后一个元素。如果 deque 为空,则返回 null
  • removeFirst() - 返回并移除 deque 的第一个元素。如果 deque 为空,则抛出异常。
  • removeLast() - 返回并移除 deque 的最后一个元素。如果 deque 为空,则抛出异常。
  • pollFirst() - 返回并移除 deque 的第一个元素。如果 deque 为空,则返回 null
  • pollLast() - 返回并移除 deque 的最后一个元素。如果 deque 为空,则返回 null

Deque 作为栈数据结构

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

然而,建议使用 Deque 作为栈来代替 Stack 类。这是因为 Stack 的方法是同步的。

这里是 Deque 接口提供的实现栈的方法:

  • push() - 在 deque 的开始处添加一个元素
  • pop() - 从 deque 的开始处移除一个元素
  • peek() - 返回 deque 开始处的一个元素

在 ArrayDeque 类中实现 Deque

import java.util.Deque;
import java.util.ArrayDeque;

class Main {

public static void main(String[] args) {
// 使用 ArrayDeque 类创建 Deque
Deque<Integer> numbers = new ArrayDeque<>();

// 向 Deque 添加元素
numbers.offer(1);
numbers.offerLast(2);
numbers.offerFirst(3);
System.out.println("Deque: " + numbers);

// 访问 Deque 的元素
int firstElement = numbers.peekFirst();
System.out.println("First Element: " + firstElement);

int lastElement = numbers.peekLast();
System.out.println("Last Element: " + lastElement);

// 从 Deque 移除元素
int removedNumber1 = numbers.pollFirst();
System.out.println("Removed First Element: " + removedNumber1);

int removedNumber2 = numbers.pollLast();
System.out.println("Removed Last Element: " + removedNumber2);

System.out.println("Updated Deque: " + numbers);
}
}

输出

Deque: [3, 1, 2]
First Element: 3
Last Element: 2
Removed First Element: 3
Removed Last Element: 2
Updated Deque: [1]

要了解更多,请访问 Java ArrayDeque