当前位置:首页 > Java

java如何用栈

2026-03-22 15:10:48Java

栈的基本概念

栈是一种遵循后进先出(LIFO)原则的数据结构,核心操作包括:

  • push:将元素压入栈顶。
  • pop:移除并返回栈顶元素。
  • peek:查看栈顶元素但不移除。
  • isEmpty:检查栈是否为空。

Java中可通过java.util.Stack类或Deque接口(推荐)实现栈操作。

方法1:使用 java.util.Stack

import java.util.Stack;

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

        // 压入元素
        stack.push(10);
        stack.push(20);

        // 弹出栈顶元素
        int top = stack.pop(); // 返回20
        System.out.println("Popped: " + top);

        // 查看栈顶元素
        int peek = stack.peek(); // 返回10
        System.out.println("Peek: " + peek);

        // 检查栈是否为空
        boolean empty = stack.isEmpty();
        System.out.println("Is empty: " + empty);
    }
}

方法2:使用 Deque(推荐)

ArrayDequeStack更高效,是Java官方推荐的方式:

import java.util.ArrayDeque;
import java.util.Deque;

public class DequeStackExample {
    public static void main(String[] args) {
        Deque<Integer> stack = new ArrayDeque<>();

        stack.push(30);
        stack.push(40);

        int top = stack.pop(); // 返回40
        System.out.println("Popped: " + top);

        int peek = stack.peek(); // 返回30
        System.out.println("Peek: " + peek);
    }
}

方法3:手动实现栈

自定义栈的底层通常基于数组或链表:

java如何用栈

public class CustomStack {
    private int maxSize;
    private int[] stackArray;
    private int top;

    public CustomStack(int size) {
        maxSize = size;
        stackArray = new int[maxSize];
        top = -1;
    }

    public void push(int value) {
        if (top < maxSize - 1) {
            stackArray[++top] = value;
        } else {
            throw new StackOverflowError("Stack is full");
        }
    }

    public int pop() {
        if (top >= 0) {
            return stackArray[top--];
        } else {
            throw new IllegalStateException("Stack is empty");
        }
    }

    public int peek() {
        return stackArray[top];
    }

    public boolean isEmpty() {
        return (top == -1);
    }
}

常见应用场景

  1. 函数调用栈:JVM使用栈管理方法调用。
  2. 表达式求值:如逆波兰表达式(后缀表达式)。
  3. 括号匹配:检查代码中的括号是否成对。
  4. 撤销操作:编辑器中的撤销功能通常依赖栈。

注意事项

  • Stack类是线程安全的,但性能较差,单线程环境推荐Deque
  • 手动实现时需处理边界条件(如栈满或栈空)。
  • 栈的递归调用可能导致栈溢出(StackOverflowError)。

标签: 如何用java
分享给朋友:

相关文章

java如何

java如何

Java 基础语法 Java 是一种面向对象的编程语言,语法相对严谨。每个 Java 程序必须包含一个 main 方法作为程序入口。以下是一个简单的 Java 程序示例: public class…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

java如何返回数组

java如何返回数组

返回数组的方法 在Java中,可以通过多种方式返回数组。以下是几种常见的方法: 直接返回数组 定义一个方法,返回类型为数组类型,直接在方法内部创建并返回数组。 public int[] getI…

教你如何完全卸载java

教你如何完全卸载java

卸载 Java 的步骤 Windows 系统 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到 Java 相关的条目,通常显示为“Java”或“Java(TM)”。右键点击选择卸载,按照…

如何用react做增删

如何用react做增删

使用React实现增删功能 在React中实现增删功能通常涉及状态管理和列表渲染。以下是一个完整的实现方案: 初始化状态 需要定义一个状态来存储列表数据,可以使用useState钩子: c…

如何用vs code开发react

如何用vs code开发react

安装必要工具 确保系统已安装Node.js(建议LTS版本),用于运行JavaScript和npm/yarn包管理工具。下载并安装Visual Studio Code(VS Code)作为代码编辑器。…