浅谈 Stack 和 Queue 的比较学习

Stack

1. 背景介绍

java.util.Stack

继承的类,从根类到Stack的树是

java.lang.Object

         java.util.AbstractCollection

                  java.util.AbstractList

                            java.util.Vector

                                         java.util.Stack

实现的接口有:

Serializable, Cloneable, Iterable, Collection, List, RandomAccess

2. 常用方法

1》boolean empty() : 测试堆栈是否为空

2》E peek() : 查看堆栈顶部的对象,但不移除它

3》E pop() : 移除堆栈顶部对象,并将该对象作为返回值

4》void push(E item) :把对象item压入堆栈顶部

5》int search(Object o) : 返回对象在堆栈中的位置,以1 为基数(即栈顶元素为1)。

3. 说明

Stack继承Vector,所以Vector类中的方法,Stack都是可以用的。


Queue

1. 背景说明

Queue是一个接口,不可以实例化对象,但是可以定义对象。

Queue的超级接口(父接口)有Collection, Iterable

所有子接口有 BlockingDeque, BlockingQueue, Deque

子类有 AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue, 其中最常用的是子类是ArrayDeque,其次就是LinkedList了。

Queue主要提供了三种操作:插入、提取和检查,而每一种操作对存在两种方法,一种方法抛出异常(操作失败),一种方法失败后返回特殊值(null或false)。下面按照先异常后特殊值的方法分别介绍:

插入     boolean add(E e)                   boolean offer(E e)(通常用于容量有限的队列中)

移除     E remove(E e)                        E poll(E e)            移除并返回队列头对象

检查     E element(E e)                       E peek(E e)          返回队列头对象,不移除

Deque

double ended queue(双端队列),双端队列可以从队列头插入和删除,也可以从列队尾部插入和删除,所以Deque可以当堆栈使用。

超级接口:Collection, Iterable, Queuq 

子接口:BlockingDeque

子类:ArrayDeque, LinkedBlocking,LinkedList

由于Deque是双端队列,可以两端操作,和Queue一样,对于插入、移除和检查三种操作失败时,都有两种处理,所以这三种操作总共对应了12种方法。

插入    addFirst(e)             offerFirst(e)             addLast(e)                offerLast(e)

移除    removeFirst()          pollFirst()                removeLast()             pollLast()

检查    getFirst()                 peekFirst()             getLast()                     peekLast()

另外Deque也继承了Queue的六个方法。

Deque也可以用做堆栈,而且应该优先使用。

Deque stack = new ArrayDeque();

Deque既可以用addFirst() 、removeFirst() 、peekFirst()来模拟堆栈,也包含了Stack中push(), pop(), peek()方法。

Deque中其他方法:contains(),  iterator(),  removeFirstOccurrence(),  removeLastOccurrence(),  size() 等方法。

ArrayDeque

ArrayDeque是Deque的实现,不是线程安全的。Deque的方法ArrayDeque都可以用。


你可能感兴趣的:(Java)