Stack原理讲解

来源:互联网 发布:windows vista ghost 编辑:程序博客网 时间:2024/06/02 06:16

一. Stack概述

本节基于JDK1.8.0_60

  1. Stack继承自Vector,可以查看Vector原理讲解
  2. Stack是动态数组实现的List,跟ArrayList一样
  3. Stack是线程安全的
  4. Stack是后进先出LIFO的
  5. 源码解析:Stack源码
    这里写图片描述

二. Stack分析

2.1 查看Vector原理讲解

由于Stack继承自Vector,所以部分是跟Vector是一样的,可以直接查看我写的Vector原理讲解,这里不再重复。

2.2 Stack存储结构

这里写图片描述

2.3 Stack初始化

public Stack() {}

Stack首次创建时,不包含任何元素

  • 执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
  • 执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
  • 执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
    这里写图片描述

三. Stack与Deque比较

Deque接口及其实现提供了更完整和一致的LIFO(后进先出)堆栈操作,优先使用Deque实现类,如:

Stack.class类注释中说明:more complete and consistent set of LIFO stack operations is provided by the {@link Deque} interface and its implementations, which should be used in preference to this class.  For example: <pre>   {@code  Deque<Integer> stack = new ArrayDeque<Integer>();}</pre>Deque <Integer> stack = new ArrayDeque <Integer>()

四. Stack后进先出操作

package com.src.collection.list;import java.util.Stack;/** * Stack的LIFO操作 * */public class StackTest {    public static void main(String[] args) {        Stack<Integer> stack = new Stack();        stack.push(1);        stack.push(2);        stack.push(3);        System.out.println("当前堆栈元素数组: " + stack.toString());        int first = stack.pop();        System.out.println("第一个出来的数据: " + first + ", 剩余元素个数: " + stack.size());        int second = stack.pop();        System.out.println("第二个出来的数据: " + second + ", 剩余元素个数: " + stack.size());        int third = stack.pop();        System.out.println("第三个出来的数据: " + third + ", 剩余元素个数: " + stack.size());//      stack.pop();    }}

运行结果:

当前堆栈元素数组: [1, 2, 3]第一个出来的数据: 3, 剩余元素个数: 2第二个出来的数据: 2, 剩余元素个数: 1第三个出来的数据: 1, 剩余元素个数: 0

五. Stack pop异常

package com.src.collection.list;import java.util.Stack;/** * Stack的LIFO操作 * */public class StackTest {    public static void main(String[] args) {        Stack<Integer> stack = new Stack();        stack.push(1);        stack.push(2);        stack.push(3);        System.out.println("当前堆栈元素数组: " + stack.toString());        int first = stack.pop();        System.out.println("第一个出来的数据: " + first + ", 剩余元素个数: " + stack.size());        int second = stack.pop();        System.out.println("第二个出来的数据: " + second + ", 剩余元素个数: " + stack.size());        int third = stack.pop();        System.out.println("第三个出来的数据: " + third + ", 剩余元素个数: " + stack.size());        stack.pop();    }}

运行结果:

当前堆栈元素数组: [1, 2, 3]第一个出来的数据: 3, 剩余元素个数: 2第二个出来的数据: 2, 剩余元素个数: 1第三个出来的数据: 1, 剩余元素个数: 0Exception in thread "main" java.util.EmptyStackException    at java.util.Stack.peek(Stack.java:102)    at java.util.Stack.pop(Stack.java:84)    at com.src.collection.list.StackTest.main(StackTest.java:26)

六. 源码

package java.util;public class Stack<E> extends Vector<E> {    public Stack() {}    // 入栈    public E push(E item) {        addElement(item);        return item;    }    // 出栈    public synchronized E pop() {        E       obj;        int     len = size();        obj = peek();        removeElementAt(len - 1);        return obj;    }    // 返回栈顶元素    public synchronized E peek() {        int     len = size();        if (len == 0)            throw new EmptyStackException();        return elementAt(len - 1);    }    public boolean empty() {        return size() == 0;    }    public synchronized int search(Object o) {        int i = lastIndexOf(o);        if (i >= 0) {            return size() - i;        }        return -1;    }    private static final long serialVersionUID = 1224463164541339165L;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸部三角区肿了怎么办 面部三角区挤了怎么办 胳膊扭着了肿了怎么办 多囊卵巢综合症治不好怎么办 胳膊受了风发麻怎么办 胳膊抻筋了很疼怎么办 腰抻了怎么办最有效 孩子胳膊抻着了怎么办 胳膊伤筋了疼怎么办 宝宝胳膊抻了疼怎么办 练完普拉提头晕怎么办 生完孩子腰背疼怎么办 宝宝不肯把屎尿怎么办 存的电话删除了怎么办 脚踝的韧带断了怎么办 买了双鞋子想退怎么办 鞋子大了一码怎么办 nba篮球大师身体素质满了怎么办 钉鞋大了一码怎么办 篮球鞋鞋垫会向里面跑怎么办 穿高跟鞋脚肿了怎么办 衣服弄到单车油怎么办 高低床孩子摔下来怎么办 量血压时老紧张怎么办 牛仔外套的扣子掉了怎么办 裤子的裤筒大了怎么办 衣服拉链驰坏了怎么办 小脚裤裤腿紧了怎么办 地垫粘地板了怎么办 棉麻衬衣皱了怎么办 麻料衣服烫皱了怎么办 在京东买一双奥康鞋没有防伪怎么办 足球鞋丁掉了一颗怎么办 鼻子有点大想变小该怎么办 阿勒泰小东沟风景区边防证怎么办 孩子上一年级了学习很差怎么办 孩子作息时间不规律怎么办 冬天冻脸怎么办小妙招 冬天冻脚怎么办小妙招 冬天脚冷怎么办小妙招 初中生不爱学习父母该怎么办