您的位置:首页 > 编程语言 > Java开发

java.util.Stack源码解析

2017-06-13 10:34 267 查看

1.java集合框架图



2.所属包

package java.util;


3.继承与实现关系

public
class Stack<E> extends Vector<E>


4.准备工作

Stack类采用的是动态数组栈实现的,规则后进先出,从栈顶压入元素、从栈顶弹出元素。栈实际上是一种添加了后进先出规则的顺序表。Stack类是在Vector类的基础上进行继承并扩展功能。

最好先看看Vector的源码再看Stack                
java集合之Vector源码解析

属性和Vector用的是一样的

5.构造方法

/**
* 创建一个栈的空构造方法
*/
public Stack() {
}


6.方法

push方法,将元素压入栈

/**
* 将元素item压入栈中
*/
public E push(E item) {
addElement(item);

return item;
}

public synchronized void addElement(E obj) {
modCount++;
//进行扩容操作
/**
* 增加此向量的容量(如有必要),以确保其至少能够保存最小容量参数指定的组件数。
* 如果当前数组的容量小于minCapacity,那么就增加容量,增加数组长度
* 新数组的长度等于原数组的长度加上增量capacityIncrement。
* 如果增加capacityIncrement小于等于0,那么就自动扩增为原来二倍。
* 如果扩增为原来的二倍还是比minCapacity小,那么就将minCapacity作为Object数组的长度。
*/
ensureCapacityHelper(elementCount + 1);
//在栈顶插入元素
elementData[elementCount++] = obj;
}
pop方法,从栈顶弹出元素,并且在栈中将该元素删除

/**
* 从栈顶弹出元素
*/
public synchronized E pop() {
E       obj;
int     len = size();
//获取栈顶元素,但是不弹出元素
obj = peek();
//删除该栈顶元素
removeElementAt(len - 1);

return obj;
}


peek方法,从栈中取出元素值,但是不删除栈中的值

/**
* 获取下标为数组长度减一也就是最后的值,也符合栈的规则,从栈顶弹出元素
*/
public synchronized E peek() {
int     len = size();

if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}

 public synchronized E elementAt(int index) {
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
}

return elementData(index);
}

 //通过索引来获取数组中对应的值
E elementData(int index) {
return (E) elementData[index];
}


-------------------------------------------------该源码为jdk1.7版本的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: