Java Deque 接口
Deque 接口定义了双端队列数据结构的功能。在本教程中,我们将了解 Deque 接口、如何使用 Deque 接口以及它的方法。
在本教程中,我们将了解 Deque 接口、如何使用它以及它的方法。
Java 集合框架的 Deque
接口定义了双端队列数据结构的功能。它扩展了 Queue
接口。
双端队列工作原理
在常规队列中,元素从队尾加入队列并且从队头离开队列。但是,在双端队列中,我们可以同时从队头和队尾插入和删除元素。
实现 Deque 的类
为了使用 Deque
接口的功能,我们需要使用它的实现类:
如何使用 Deque?
在 Java 中,我们首先导入 java.util.Deque
接口,然后按照如下的方式创建双端队列:
// 使用 ArrayDeque 创建双端队列
Deque<String> animal1 = new ArrayDeque<>();
// 使用 LinkedList 创建双端队列
Deque<String> animal2 = new LinkedList<>();
在这里,我们已经分别使用 ArrayDeque
和 LinkedList
创建了 2 个双端队列对象。这些对象可以使用 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 的集合框架的类提供了 Stack
类作为堆栈的实现,但是一般不建议使用 Stack
类,因为 Stack
的方法是同步的,并且效率不高。
Deque
接口同样定义了实现堆栈的方法:
push()
- 在双端队列的队头添加一个元素pop()
- 从双端队列的队头删除一个元素peek()
- 从双端队列队头返回一个元素
ArrayDeque
ArrayDeque
类使用数组完全实现了 Deque
接口。当 ArrayDeque
作为队列使用的时候,比 LinkedList
性能好;当作为栈使用的时候,比 Stack
性能好。
以下是使用 ArrayDeque 作为双端队列使用的示例:
import java.util.Deque;
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
// 使用 ArrayDeque 创建双端队列
Deque<Integer> numbers = new ArrayDeque<>();
// 添加元素到双端队列
numbers.offer(1);
numbers.offerLast(2);
numbers.offerFirst(3);
System.out.println("Deque: " + numbers);
// 访问双端队列中的元素
int firstElement = numbers.peekFirst();
System.out.println("First Element: " + firstElement);
int lastElement = numbers.peekLast();
System.out.println("Last Element: " + lastElement);
// 从双端队列中删除元素
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 类 章节。