Java API 之 Stack<E>类

一、简介

Stack<E>类在Java.util包下,作为一种后进先出(LIFO)的数据结构,是一种比较简单好用的数据结构。

JVM的栈空间结构,以及方法调用的时候如何在栈中进行入栈、出栈都使得我们需要去了解栈是什么样的,以及如何简单地使用它。如图:

栈结构就像是一个竖形容器一样,入栈的时候从栈顶向下压入栈帧,出栈的时候也是从栈顶移除数据。

二、代码示例

Stack类扩展了Vector,而Vector在代码实现的时候采用了很多synchronized同步锁来控制并发问题,两者都是线程安全的。

Stack主要扩展了五个方法:

1)push:压入栈

2)pop:从栈顶移除,如果栈为空,抛出异常

3)empty:判断栈是否为空

4)peek:查看栈顶的元素,如果栈为空,那么抛出异常

5)search:搜索指定元素,如果搜索不到返回-1,否则返回1

import java.util.Stack;

public class StackDemo {

    public static void main(String[] args) {
        Stack<String> taskStack = new Stack<>();
        // push
        taskStack.push("stackFrame1");
        taskStack.push("stackFrame2");
        taskStack.push("stackFrame3");
        taskStack.push("stackFrame4");
        System.out.println(taskStack);
        // pop
        taskStack.pop();
        taskStack.pop();
        taskStack.pop();
        System.out.println(taskStack);
        taskStack.pop();
        // 如果为空,pop()方法会抛出异常
        if (!taskStack.empty()) {
            taskStack.pop();
        } else {
            System.out.println("stack empty");
        }
        // push
        taskStack.push("stackFrame5");
        // peek
        System.out.println(taskStack.peek());
        // search
        System.out.println(taskStack.search("stackFrame5"));
        System.out.println(taskStack.search("stackFrame6"));
    }
}

猜你喜欢

转载自www.cnblogs.com/lay2017/p/10156436.html