在Java中,Deque
(双端队列)是一个接口,它属于java.util
包。Deque
扩展了Queue
接口,提供了在两端添加和移除元素的能力。这意味着你可以在队列的头部或尾部进行插入和删除操作。
以下是Deque
接口的一些关键特性:
- 两端操作:你可以在双端队列的头部(front)或尾部(rear)添加或移除元素。
- 头部(Head):双端队列的第一个元素,可以在这里进行插入和删除操作。
- 尾部(Tail):双端队列的最后一个元素,可以在这里进行插入和删除操作。
- 容量:一些双端队列实现有固定容量,而其他实现则可以动态增长。
Deque
接口定义了一些方法,包括:
void addFirst(E e)
:在双端队列的头部插入一个元素。void addLast(E e)
:在双端队列的尾部插入一个元素。boolean offerFirst(E e)
:在双端队列的头部插入一个元素,如果成功,返回true
;如果队列满了,返回false
。boolean offerLast(E e)
:在双端队列的尾部插入一个元素,如果成功,返回true
;如果队列满了,返回false
。E removeFirst()
:移除并返回双端队列头部的元素。E removeLast()
:移除并返回双端队列尾部的元素。E pollFirst()
:移除并返回双端队列头部的元素,如果为空,返回null
。E pollLast()
:移除并返回双端队列尾部的元素,如果为空,返回null
。E getFirst()
:返回双端队列头部的元素但不移除它。E getLast()
:返回双端队列尾部的元素但不移除它。
Java提供了几种Deque
的实现:
ArrayDeque
:一个基于动态数组的双端队列,没有容量限制。LinkedList
:一个基于链表的双端队列,可以作为双端队列使用。
使用ArrayDeque
的代码示例
import java.util.ArrayDeque;
import java.util.Deque;
public class ArrayDequeExample {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<>();
// 在头部添加元素
deque.addFirst(1);
deque.addFirst(2);
// 在尾部添加元素
deque.addLast(3);
deque.addLast(4);
// 移除并返回头部元素
System.out.println(deque.removeFirst()); // 输出 2
// 移除并返回尾部元素
System.out.println(deque.removeLast()); // 输出 4
// 查看但不移除头部元素
System.out.println(deque.peekFirst()); // 输出 1
// 查看但不移除尾部元素
System.out.println(deque.peekLast()); // 输出 3
// 双端队列中的元素
System.out.println(deque); // 输出 [1, 3]
}
}
使用LinkedList
的代码示例
import java.util.Deque;
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
Deque<Integer> deque = new LinkedList<>();
// 在头部添加元素
deque.addFirst(1);
deque.addFirst(2);
// 在尾部添加元素
deque.addLast(3);
deque.addLast(4);
// 移除并返回头部元素
System.out.println(deque.removeFirst()); // 输出 2
// 移除并返回尾部元素
System.out.println(deque.removeLast()); // 输出 4
// 查看但不移除头部元素
System.out.println(deque.peekFirst()); // 输出 1
// 查看但不移除尾部元素
System.out.println(deque.peekLast()); // 输出 3
// 双端队列中的元素
System.out.println(deque); // 输出 [1, 3]
}
}
这些示例展示了如何使用ArrayDeque
和LinkedList
实现双端队列,进行头部和尾部的插入和删除操作。可以根据具体需求选择合适的双端队列实现。