Java 基础教程

Java Stack(堆栈)

什么是堆栈?

堆栈(Stack)是一种数据结构,它是一种后进先出(Last-In-First-Out,LIFO)的数据结构,即最后压入栈的元素最先弹出。

堆栈的特点是只能在栈顶进行插入和删除操作。插入操作称为压栈(Push),将元素放入栈顶;删除操作称为弹栈(Pop),将栈顶元素移除。

堆栈通常用于临时存储和处理数据,例如函数调用栈、表达式求值、括号匹配等场景。

在计算机内存中,堆栈的实现通常是通过使用一段连续的内存空间来存储栈中的元素。栈顶指针(Stack Pointer)指向栈顶元素的位置,每次压栈操作会将栈顶指针向上移动,每次弹栈操作会将栈顶指针向下移动。

在编程中,可以使用数组或链表等数据结构来实现堆栈。在 Java 中,可以使用 Stack 类或 ArrayDeque 类来实现堆栈的功能。

Stack 类介绍

在 Java 中,Stack 类是一种实现了后进先出(LIFO)的数据结构,它继承自 Vector类。除了 Stack 类之外,还可以使用 Deque(双端队列)的实现类 ArrayDeque 来模拟栈的行为。

Stack 类提供了一种方便的方式来处理后进先出的数据,常用于需要按照反向顺序处理元素的场景,例如表达式求值、括号匹配等。

Stack 类提供了一组方法来操作栈,包括压栈(push)、出栈(pop)、查看栈顶元素(peek)等。

Stack 类常用方法

Stack类的常用方法包括:

  • push(Object item):将元素压入栈顶。

  • pop():弹出栈顶元素,并将其从栈中删除。

  • peek():查看栈顶元素,但不从栈中删除。

  • empty():判断栈是否为空。

  • search(Object item):查找元素在栈中的位置。

Stack 常用实现类

下面是 Java 中常用的 Stack 实现类:

Stack 类

Stack 类是 Java 提供的标准栈实现,继承自 Vector 类。它提供了一组方法来操作栈,包括压栈(push)、出栈(pop)、查看栈顶元素(peek)等。如下:

import java.util.Stack;

Stack<String> stack = new Stack<>();

ArrayDeque 类

ArrayDeque 是 Java 提供的双端队列的实现类,可以模拟栈的行为。它提供了一组方法来操作栈,包括压栈(push)、出栈(pop)、查看栈顶元素(peek)等。与 Stack 类相比,ArrayDeque 在多线程环境下性能更好。如下:

import java.util.ArrayDeque;

ArrayDeque<String> stack = new ArrayDeque<>();

无论是使用 Stack 类还是 ArrayDeque 类,都可以实现栈的功能。选择哪种实现类取决于具体的需求和性能要求。

Stack 示例

下面是一个使用 Stack 的简单示例,代码如下:

import java.util.Stack;

public class StackExample {
   public static void main(String[] args) {
       Stack<String> stack = new Stack<>();

       // 压入元素
       stack.push("Apple");
       stack.push("Banana");
       stack.push("Orange");

       // 查看栈顶元素
       System.out.println("栈顶元素:" + stack.peek());

       // 弹出栈顶元素
       String poppedElement = stack.pop();
       System.out.println("弹出的元素:" + poppedElement);

       // 遍历栈并打印元素
       System.out.println("遍历栈并打印元素:");
       for (String element : stack) {
           System.out.println(element);
       }

       // 判断栈是否为空
       System.out.println("栈是否为空:" + stack.empty());

       // 查找元素在栈中的位置
       int index = stack.search("Banana");
       System.out.println("元素 \"Banana\" 在栈中的位置:" + index);
   }
}

运行示例,输出结果:

栈顶元素:Orange
弹出的元素:Orange
遍历栈并打印元素:
Apple
Banana
栈是否为空:false
元素 "Banana" 在栈中的位置:1

在上面的示例中,我们首先创建了一个 Stack 对象。然后,使用 push() 方法将元素压入栈顶,使用 peek() 方法查看栈顶元素。

接下来,使用 pop() 方法弹出栈顶元素,并打印弹出的元素。使用 for-each 循环遍历栈并打印元素。

然后,使用 empty() 方法判断栈是否为空。使用 search() 方法查找元素在栈中的位置。

Stack 更多方法用法请参考 Java API

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号