Java中的Queue和Deque都是接口,它们分别表示队列和双端队列。Queue接口主要用于实现先进先出(FIFO)的数据结构,而Deque接口则用于实现双端队列,即可以在两端插入和删除元素。
Queue的基本概念和使用方法
-
基本概念:Queue是一种先进先出(FIFO)的数据结构,新元素被添加到队尾,而最早添加的元素则位于队头。
-
常用方法:
add(E e):在队列尾部添加一个元素,如果队列已满,则抛出IllegalStateException异常。offer(E e):在队列尾部添加一个元素,如果队列已满,则返回false。remove():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。poll():获取并移除队列头部的元素,如果队列为空,则返回null。element():获取但不移除队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。peek():获取但不移除队列头部的元素,如果队列为空,则返回null。
-
- 示例代码:
import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(); // 添加元素到队列尾部 queue.offer(1); queue.offer(2); queue.offer(3); // 查看队首元素但不移除 System.out.println("队首元素: " + queue.peek()); // 移除并返回队首元素 System.out.println("移除的元素: " + queue.poll()); // 遍历队列中的元素 for (Integer item : queue) { System.out.println("队列元素: " + item); } } }
- 示例代码:
Deque的基本概念和使用方法
-
基本概念:Deque允许在两端进行插入和删除操作的队列。它可以从队头或队尾添加或移除元素。
-
常用方法:
addFirst(E e):在队列头部插入元素,如果队列已满,则抛出IllegalStateException异常。offerFirst(E e):在队列头部插入元素,如果队列已满,则返回false。addLast(E e):在队列尾部插入元素,如果队列已满,则抛出IllegalStateException异常。offerLast(E e):在队列尾部插入元素,如果队列已满,则返回false。removeFirst():移除并返回队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。removeLast():移除并返回队列尾部的元素,如果队列为空,则抛出NoSuchElementException异常。pollFirst():获取并移除队列头部的元素,如果队列为空,则返回null。pollLast():获取并移除队列尾部的元素,如果队列为空,则返回null。getFirst():获取但不移除队列头部的元素,如果队列为空,则抛出NoSuchElementException异常。getLast():获取但不移除队列尾部的元素,如果队列为空,则抛出NoSuchElementException异常。peekFirst():获取但不移除队列头部的元素,如果队列为空,则返回null。peekLast():获取但不移除队列尾部的元素,如果队列为空,则返回null。
-
示例代码:
-
import java.util.ArrayDeque; import java.util.Deque; public class DequeExample { public static void main(String[] args) { Deque<Integer> deque = new ArrayDeque<>(); // 在队首和队尾添加元素 deque.addFirst(1); deque.addLast(2); deque.addFirst(0); deque.addLast(3); // 查看队首和队尾元素但不移除 System.out.println("队首元素: " + deque.peekFirst()); System.out.println("队尾元素: " + deque.peekLast()); // 移除并返回队首和队尾元素 System.out.println("移除的队首元素: " + deque.removeFirst()); System.out.println("移除的队尾元素: " + deque.removeLast()); // 遍历双端队列中的元素 for (Integer item : deque) { System.out.println("双端队列元素: " + item); } } }
-
Queue和Deque的区别和联系
-
区别:
- Queue只能在队尾添加元素,从队头移除元素;而Deque可以在两端添加和移除元素。
- Queue不支持随机访问,而Deque也不支持随机访问,但可以通过迭代器遍历元素。
- Queue适用于需要先进先出的场景,如任务调度、消息传递等;Deque除了可以作为队列使用外,还可以作为栈使用,实现后进先出的功能。
-
联系:
- Deque接口继承自Queue接口,因此Deque具有Queue的所有功能,同时还增加了从两端添加和移除元素的方法。
- 在实际开发中,可以根据具体需求选择使用Queue或Deque。如果只需要单向操作(如生产者消费者模式),则使用Queue;如果需要双向操作(如撤销/重做功能),则使用Deque。
总的来说,Queue和Deque都是Java集合框架中的重要接口,它们提供了有序存储和访问元素的方式。Queue是先进先出的单向队列,而Deque是允许在两端进行插入和删除操作的双端队列。在实际开发中,可以根据具体需求选择合适的数据结构。


被折叠的 条评论
为什么被折叠?



