zoukankan      html  css  js  c++  java
  • Stack源码分析

    简介

    Stack是一个栈,那就满足于后进先出(FILO)。

    public class Stack<E> extends Vector<E> 
    

    该类继承自Vector,即其容器的数据类型是数据,拥有Vector的特性。在Vector源码分析有详细该类信息。


    构造函数:
    public Stack() {}
    

    常用API
                 boolean       empty()
    synchronized E             peek()
    synchronized E             pop()
                 E             push(E object)
    synchronized int           search(Object o)
    

    Stack也拥有Vector的API。


    源码分析(JDK1.8)
    		//在栈顶添加数据
        public E push(E item) {
            addElement(item);
    
            return item;
        }
    	
    		//在栈顶删除数据并返回
        public synchronized E pop() {
            E       obj;
            int     len = size();
    
            obj = peek();
          //removeElementAt在父类中有定义。
            removeElementAt(len - 1);
    
            return obj;
        }
    
    		//返回栈顶数据
        public synchronized E peek() {
          //size在父类中有定义。
            int     len = size();
    
            if (len == 0)
                throw new EmptyStackException();
            return elementAt(len - 1);
        }
    
    		//栈是否为空
        public boolean empty() {
            return size() == 0;
        }
    
    		//在栈顶往栈底查找数据o的索引
        public synchronized int search(Object o) {
          //lastIndexOf在父类中有定义。
            int i = lastIndexOf(o);
    
            if (i >= 0) {
                return size() - i;
            }
            return -1;
        }
    
        // 版本ID
        private static final long serialVersionUID = 1224463164541339165L;
    

    总结
    • Stack是一个栈,该类通过一个数据为数据结构来实现。

    • Stack继承自Vector,拥有Vector功能和属性。

  • 相关阅读:
    [hdu2196]Computer树的直径
    [poj2342]Anniversary party树形dp入门
    链式前向星模板
    LintCode-50.数组剔除元素后的乘积
    Markdown的基本语法
    LintCode-8.旋转字符串
    LintCode-1.A + B 问题
    LintCode-61.搜索区间
    LintCode-88.最近公共祖先
    LintCode-54.转换字符串到整数
  • 原文地址:https://www.cnblogs.com/zitai/p/13092269.html
Copyright © 2011-2022 走看看