当前位置:首页 > Java

java如何用栈

2026-03-22 15:10:48Java

栈的基本概念

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

java如何用栈

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

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

java如何用栈

方法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:手动实现栈

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

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中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

java面试官如何面试别人

java面试官如何面试别人

考察基础知识 从Java核心概念入手,包括面向对象特性(封装、继承、多态)、集合框架(ArrayList vs LinkedList、HashMap实现原理)、异常处理机制、多线程(线程池、锁机制)等…

如何用react做项目

如何用react做项目

创建React项目 使用官方工具create-react-app快速初始化项目。确保已安装Node.js(版本≥14.0.0)和npm/yarn。 运行以下命令生成项目结构: npx creat…

如何用react构建单页面

如何用react构建单页面

使用React构建单页面应用(SPA)的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过命令行输入node -v和npm -v验证版本。推荐使用LTS版本。 创建…

react如何用at.js

react如何用at.js

使用 AT.js 在 React 中实现 A/B 测试或个性化 AT.js 是 Adobe Target 提供的一个 JavaScript 库,用于在网页上实现 A/B 测试、个性化内容和体验。在 R…