java.util.Stack源码解析

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值