stack源码分析
1. 体系结构
class Stack<E> extends Vector<E>
不看源码之前真心不知道Stack是继承自Vector来实现的,而且Stack只是在Vector的基础上提供了几个方法罢了。因此,如果有了上篇Vector源码的基础,看这个就相当相当简单了
2. 构造函数
public Stack() {
}
构造函数也非常简单
3. 常用方法
3.1 E push(E item)
public E push(E item) {
addElement(item);
return item;
}
入栈方法,内部使用了Vector的addElement函数,我们看下源码:
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
方法很简单,就不过多解析了,此方法是一个同步方法,线程安全的
3.2 synchronized E pop()
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
3.3 synchronized E peek()
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
3.4 synchronized int search(Object o)
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
4. 总结
需要我们了解的是:Stack是基于Vector来实现的,且是线程安全的,具有先进后出的特性即可。