Deque是Queue的子接口,它们共同继承于Collection、Iterable。
一、Queue容器(单向队列)
- 实现类:ArrayDeque、LinkedList、PriorityQueue(优先队列)
-
队列通常但不一定以 FIFO(先进先出)方式对元素进行排序。 例外情况包括优先级队列,它根据提供的比较器或元素的自然顺序对元素进行排序,以及对元素 LIFO(后进先出)进行排序的 LIFO 队列(或堆栈)。
方法:
方法名 | 方法说明 |
add(e),offer(e) | 添加元素 |
remove(),poll() | 移除元素 |
element(),peek() | 检索头部元素 |
-
offer(e)会插入一个元素,否则返回false。add(e)抛出未经检查的异常来添加元素失败。
-
remove()和poll()方法仅在队列为空时的行为不同:remove()方法抛出异常,而poll()方法返回null。
-
element()和peek()方法返回但不删除队列的头部,在peek()中,如果此队列为空,则返回null。
二、Deque容器(双端队列)
-
实现类:ArrayDeque、LinkedList
-
支持两端元素插入和移除的线性集合
-
定义了访问双端队列两端元素的方法。 提供了插入、删除和检查元素的方法。 这些方法中的每一个都以两种形式存在:一种在操作失败时抛出异常,另一种返回特殊值(null或false,具体取决于操作)。
方法:
-
Deque方法的总结
头部操作 | 尾部操作 | |||
若失败抛出异常 | 若失败返回null | 若失败抛出异常 | 若失败返回null | |
插入元素 | addFirst(e) | offerFirst(e) | addLast(e) | offerLast(e) |
删除元素 | removeFirst() | pollFirst() | removeLast() | pollLast() |
获取元素不删除 | getFirst() | peekFirst() | getLast() | peekLast() |
- 比较Queue和Deque方法
Queue | Deque |
add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
-
比较Stack和Deque方法
Stack | Deque |
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |