在本教程中,我们将学习Deque接口,如何使用它及其方法。
Java集合框架的Deque接口提供了双端队列(Deque)的功能。它继承了Queue接口。
双端队列的工作原理
在常规队列中,元素是从后面添加的,而从前面删除的。但是,在双端队列中,我们可以从前后插入和删除元素。
实现Deque的类
为了使用Deque接口的功能,我们需要使用实现接口的类:
如何使用Deque?
在Java中,我们必须导入要使用Deque的包 java.util.Deque 。
Deque<String> animal1 = new ArrayDeque<>(); Deque<String> animal2 = new LinkedList<>();
在这里,我们分别创建了类ArrayDeque和LinkedList的对象animal1和animal2。 这些对象可以使用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类。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈的方法:
push() - 在双端队列的开头添加元素
pop() - 从双端队列的开头删除元素
peek() - 从双端队列的开头返回一个元素
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("第一个元素: " + firstElement); int lastElement = numbers.peekLast(); System.out.println("最后一个元素: " + lastElement); //从Deque 移除元素 int removedNumber1 = numbers.pollFirst(); System.out.println("移除第一个元素: " + removedNumber1); int removedNumber2 = numbers.pollLast(); System.out.println("移除最后一个元素: " + removedNumber2); System.out.println("更新后的Deque: " + numbers); } }
输出结果
Deque: [3, 1, 2] 第一个元素: 3 最后一个元素: 2 移除第一个元素: 3 移除最后一个元素: 2 更新后的Deque: [1]
要了解更多信息,请访问Java ArrayDeque。