浅谈 Stack 和 Queue 的比较学习

Stack

1. 背景介绍

java.util.Stack<E>

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

java.lang.Object

         java.util.AbstractCollection<E>

                  java.util.AbstractList<E>

                            java.util.Vector<E>

                                         java.util.Stack<E>

实现的接口有:

Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, 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<E>, Iterable<E> ,

所有子接口有 BlockingDeque<E>, BlockingQueue<E>, Deque<E>,

子类有 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<E>, Iterable<E>, Queuq<E> 

子接口:BlockingDeque<E>

子类: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<Integer> stack = new ArrayDeque<Integer>();

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

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

ArrayDeque

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值