Java教程-Java Deque

Java Deque
双端队列(Deque)是一种线性集合,支持从两端插入和删除元素。"Deque"是"double-ended queue"的缩写。
Deque没有固定的元素数量限制。然而,该接口支持有容量限制的双端队列以及没有固定大小限制的双端队列。它提供了各种方法来插入、删除和检查元素。
这些方法通常有两种形式:一种在特定操作失败时抛出异常,另一种返回一个特殊值,该值可以是null或false,具体取决于操作。
方法
java.util.Deque接口提供了在Java中执行双端队列操作的方法。它的实现类是java.util.ArrayDeque。
方法 | 描述 |
---|---|
add(E e) | 用于将指定元素插入由双端队列表示的队列中。 |
addAll(Collection c) | 在双端队列末尾添加指定集合中的所有元素。 |
addFirst(E e) | 在双端队列的前端插入指定元素。 |
addLast(E e) | 在双端队列的末尾插入指定元素。 |
contains(Object o) | 如果双端队列包含指定元素,则返回true。 |
descendingIterator() | 返回一个反向顺序遍历元素的迭代器。 |
element() | 检索由双端队列表示的队列的头部。 |
getFirst() | 检索但不删除双端队列的第一个元素。 |
getLast() | 检索但不删除双端队列的最后一个元素。 |
iterator() | 返回一个按正确顺序遍历双端队列中元素的迭代器。 |
offer(E e) | 将指定元素插入双端队列,如果成功则返回true,如果没有可用空间则返回false。 |
offerFirst() | 在双端队列的前端插入指定元素,除非违反容量限制。 |
offerLast() | 在双端队列的末尾插入指定元素,除非违反容量限制。 |
peek() | 检索但不移动由双端队列表示的队列的头部,如果双端队列为空则可能返回null。 |
peekFirst() | 检索但不移动双端队列的第一个元素,如果双端队列为空则可能返回null。 |
peekLast() | 检索但不移动双端队列的最后一个元素,如果双端队列为空则可能返回null。 |
poll() | 检索并删除由双端队列表示的队列的头部,如果双端队列为空则可能返回null。 |
pollFirst() | 检索并删除双端队列的第一个元素,如果双端队列为空则可能返回null。 |
pollLast() | 检索并删除双端队列的最后一个元素,如果双端队列为空则可能返回null。 |
pop() | 从由双端队列表示的堆栈中弹出一个元素。 |
push() | 将一个元素推入由双端队列表示的堆栈中。 |
remove() | 检索并删除由双端队列表示的队列的头部。 |
remove(Object o) | 从双端队列中删除第一个出现的指定元素。 |
removeFirst() | 检索并删除双端队列的第一个元素。 |
removeFirstOccurrence(Object o) | 从双端队列中删除元素的第一个出现。 |
removeLast() | 检索并删除双端队列的最后一个元素。 |
removeLastOccurrence(Object o) | 从双端队列中删除元素的最后一个出现。 |
size() | 返回双端队列中的元素总数。 |
示例1
import java.util.ArrayDeque;
import java.util.Deque;
public class JavaDequeExample1 {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<Integer>();
// 插入元素
deque.add(1);
deque.add(2);
deque.add(3);
System.out.println("插入三个元素:");
for (Integer integer : deque) {
System.out.println(integer);
}
// 弹出元素
deque.pop();
System.out.println("弹出元素后:");
for (Integer integer : deque) {
System.out.println(integer);
}
deque.remove(3);
System.out.println("移除元素3后:" + deque);
}
}
输出结果:
插入三个元素:
1
2
3
弹出元素后:
2
3
移除元素3后:[2]
示例2
import java.util.ArrayDeque;
import java.util.Deque;
public class JavaDequeExample2 {
public static void main(String[] args) {
Deque<String> deque = new ArrayDeque<String>();
// 在双端队列的前端添加元素
deque.addFirst("Java");
System.out.println("第一个元素为:" + deque);
// 再次在双端队列的前端添加元素
deque.addFirst("Python");
System.out.println("在双端队列前端添加下一个元素后:" + deque);
deque.add("Ruby");
System.out.println("最终的双端队列为:" + deque);
// 返回元素数量
int size = deque.size();
System.out.println("元素数量为:" + size);
// 移除最后一个元素
deque.removeLast();
System.out.println("移除最后一个元素后的双端队列为:" + deque);
}
}
输出结果:
第一个元素为:[Java]
在双端队列前端添加下一个元素后:[Python, Java]
最终的双端队列为:[Python, Java, Ruby]
元素数量为:3
移除最后一个元素后的双端队列为:[Python, Java]