Java Deque 接口
提示
- 双端队列功能:Java 中的
Deque
接口提供双端队列功能,扩展了Queue
接口,允许在队列的前端和后端插入和移除元素。 - 实现类和使用:
Deque
通过ArrayDeque
和LinkedList
实现,需要导入java.util.Deque
包以使用其功能。 - 方法和栈实现:
Deque
继承了Queue
的所有方法,并增加了特有方法如addFirst()
和addLast()
。它也被推荐用作栈的替代,提供push()
,pop()
, 和peek()
方法。
Java 集合框架中的 Deque
接口提供了双端队列的功能。它扩展了 Queue
接口。
Deque 的工作原理
在常规队列中,元素从后端添加并从前 端移除。然而,在双端队列中,我们可以从前端和后端插入和移除元素。
实现 Deque 的类
为了使用 Deque
接口的功能,我们需要使用实现它的类:
如何使用 Deque?
在 Java 中,我们必须导入 java.util.Deque
包来使用 Deque
。
// ArrayDeque 的 Array 实现
Deque<String> animal1 = new ArrayDeque<>();
// LinkedList 的 Deque 实现
Deque<String> animal2 = new LinkedList<>();
这里,我们分别创建了 ArrayDeque
和 LinkedList
类的对象 animal1
和 animal2
。这些对象可以使用 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。