Deque接口
Deque
是 Java 集合框架中的一个接口,全称为“Double Ended Queue”,即双端队列。它继承自 Queue
接口,允许在队列的两端(头部和尾部)进行插入、删除和访问操作。以下将从接口定义、常用方法、实现类、使用示例和应用场景几个方面详细介绍 Deque
接口。
接口定义
Deque
接口位于 java.util
包中,定义如下:
public interface Deque<E> extends Queue<E> { // 双端队列操作方法 // ... }
它继承了 Queue
接口的功能,同时提供了更多在队列两端操作的方法。
常用方法
插入元素
- 在头部插入void addFirst(E e):在双端队列的头部插入指定元素,如果插入失败(如队列已满)会抛出异常。boolean offerFirst(E e):在双端队列的头部插入指定元素,插入成功返回 true,失败返回 false。
- 在尾部插入void addLast(E e):在双端队列的尾部插入指定元素,如果插入失败会抛出异常。boolean offerLast(E e):在双端队列的尾部插入指定元素,插入成功返回 true,失败返回 false。
删除元素
- 从头部删除E removeFirst():移除并返回双端队列的第一个元素,如果队列为空会抛出异常。E pollFirst():移除并返回双端队列的第一个元素,如果队列为空返回 null。
- 从尾部删除E removeLast():移除并返回双端队列的最后一个元素,如果队列为空会抛出异常。E pollLast():移除并返回双端队列的最后一个元素,如果队列为空返回 null。
查看元素
- 查看头部元素E getFirst():返回双端队列的第一个元素,如果队列为空会抛出异常。E peekFirst():返回双端队列的第一个元素,如果队列为空返回 null。
- 查看尾部元素E getLast():返回双端队列的最后一个元素,如果队列为空会抛出异常。E peekLast():返回双端队列的最后一个元素,如果队列为空返回 null。
实现类
Deque
接口有多个实现类,常见的有:
ArrayDeque
:基于数组实现的双端队列,不允许存储null
元素,在作为栈或队列使用时比Stack
和LinkedList
更高效。LinkedList
:基于双向链表实现的双端队列,允许存储null
元素,适合频繁插入和删除元素的场景。
使用示例
import java.util.ArrayDeque; import java.util.Deque; public class DequeExample { public static void main(String[] args) { // 创建一个 Deque 实例,使用 ArrayDeque 实现 Deque<String> deque = new ArrayDeque<>(); // 在头部插入元素 deque.addFirst("apple"); deque.offerFirst("banana"); // 在尾部插入元素 deque.addLast("cherry"); deque.offerLast("date"); // 查看头部和尾部元素 System.out.println("头部元素: " + deque.peekFirst()); System.out.println("尾部元素: " + deque.peekLast()); // 从头部删除元素 String firstElement = deque.pollFirst(); System.out.println("移除的头部元素: " + firstElement); // 从尾部删除元素 String lastElement = deque.pollLast(); System.out.println("移除的尾部元素: " + lastElement); // 遍历双端队列 for (String element : deque) { System.out.println(element); } } }
应用场景
- 栈(Stack):
Deque
可以很方便地模拟栈的行为,使用addFirst()
和removeFirst()
方法可以实现后进先出(LIFO)的栈操作。 - 队列(Queue):使用
addLast()
和removeFirst()
方法可以实现先进先出(FIFO)的队列操作。 - 滑动窗口:在处理一些需要维护固定大小窗口的问题时,
Deque
可以高效地实现窗口的滑动和元素的更新。
综上所述,Deque
接口提供了灵活的双端队列操作,通过不同的实现类可以满足多种场景的需求。
Java集合框架 文章被收录于专栏
Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。