java.util.Stack源码解析

来源:互联网 发布:自组织神经网络算法 编辑:程序博客网 时间:2024/05/16 16:18

1.java集合框架图


2.所属包

package java.util;

3.继承与实现关系

publicclass 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版本的




原创粉丝点击