Stack
Stack 是 Java 中的一个类,用来实现栈这一数据结构,但现在推荐用更强大的 Deque 来代替它。
常用方法有:
empty():判断栈是否为空。peek():查看栈顶元素。push(E e):入栈。pop():出栈,并返回出栈的元素。

Queue
Queue 是 Java 中的一个接口,用来实现队列这一数据结构,实现类有 ArrayDeque、LinkedList、PriorityQueue 等。
常用方法:
isEmpty():判断队列是否为空。
peek():查看队首元素,若队列为空则返回null。offer(E e):入队,入队成功则返回ture,队列已满则返回false。poll():出队,并返回出队的元素。若队列为空则返回null。
element():查看队首元素,若队列为空则抛出异常。add(E e):入队,队列已满则抛出异常。remove():出队,并返回出队的元素。若队列为空则抛出异常。

Deque
Deque 即 “Double Ended Queue”(双向队列),这个接口扩展了 Queue 接口。与普通的队列的区别在于,队列只能在队尾插入新元素,删除队首的元素,而双向队列同时支持对其首部和尾部的插入和删除操作。所以它既能当队列用,也能当做栈用。
Deque 除了继承了 Queue 中的方法,还额外扩展了一些方法:
peekFirst():查看队首元素,若双向队列为空则返回null,相当于peek()。peekFirst():查看队尾元素,若双向队列为空则返回null。getFirst():查看队首元素,若双向队列为空则抛出异常,相当于element()。getFirst():查看队尾元素,若双向队列为空则抛出异常。
offerFirst(E e):在队首前插入元素,双向队列已满则返回false。offerLast(E e):在队尾后插入元素,双向队列已满则返回false,相当于offer(E e)。addFirst(E e):在队首前插入元素,双向队列已满则抛出异常。addLast(E e):在队尾后插入元素,双向队列已满则抛出异常,相当于add(E e)。
pollFirst():删除队首元素,并将它作为返回值,相当于poll(E e)。pollLast():删除队尾元素,并将它作为返回值。removeFirst():删除队首元素,并将它作为返回值,相当于remove(E e)。removeLast():删除队尾元素,并将它作为返回值。
push(E e):相当于addFirst()。pop():相当于removeFirst()。

若不管双向队列的尾部,只从它的首部进行插入和删除操作,这个双向队列就可以当作栈来使用,此时 push(E e)、offerFisrt()、addFirst(E e) 三个方法用作入栈操作,pop()、pollFirst()、removeFirst() 用作出栈操作。
总结:Deque 、Queue 和 Stack 中方法的比较
| Deque | Queue | Stack | 操作 |
|---|---|---|---|
peekFirst(), getFirst() | peek() | peek() | 查看队首/栈顶元素 |
peekLast(), getLast() | N/A | N/A | 查看队尾/栈底的元素 |
offerFirst(E e), addFirst(E e) | N/A | push(E e) | 插入队首 /入栈 |
offerLast(E e), addLast(E e) | offer(E e), add(E e) | N/A | 入队/插入栈底 |
pollFirst(), removeFirst() | poll(), remove() | pop() | 出队/出栈 |
pollLast(), removeLast() | N/A | N/A | 移除队尾/栈底元素 |
1663

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



