Java集合框架的Deque
接口提供了双端队列的功能。它扩展了Queue
接口。
双端队列的工作
在常规队列中,元素是从后面添加的,而从前面删除的。但是,在双端队列中,我们可以从前后插入和删除元素 。
实现Deque的类
为了使用Deque
接口的功能,我们需要使用实现该接口的类:
- ArrayDeque
- 链表
如何使用Deque?
在Java中,我们必须导入java.util.Deque
包才能使用Deque
。
// Array implementation of Deque
Deque animal1 = new ArrayDeque<>();
// LinkedList implementation of Deque
Deque 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) {
// Creating Deque using the ArrayDeque class
Deque numbers = new ArrayDeque<>();
// add elements to the Deque
numbers.offer(1);
numbers.offerLast(2);
numbers.offerFirst(3);
System.out.println("Deque: " + numbers);
// Access elements of the Deque
int firstElement = numbers.peekFirst();
System.out.println("First Element: " + firstElement);
int lastElement = numbers.peekLast();
System.out.println("Last Element: " + lastElement);
// Remove elements from the 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。