Stack
1. 背景介绍
java.util.Stack
继承的类,从根类到Stack的树是
java.lang.Object
java.util.AbstractCollection
java.util.AbstractList
java.util.Vector
java.util.Stack
实现的接口有:
Serializable, Cloneable, Iterable
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
所有子接口有 BlockingDeque
子类有 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
子接口: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中其他方法:contains(), iterator(), removeFirstOccurrence(), removeLastOccurrence(), size() 等方法。
ArrayDeque
ArrayDeque是Deque的实现,不是线程安全的。Deque的方法ArrayDeque都可以用。