ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 使用数组的 Java 栈实现 > 原文: [https://howtodoinjava.com/data-structure/java-stack-implementation-array/](https://howtodoinjava.com/data-structure/java-stack-implementation-array/) 本教程给出了**使用数组**实现[栈](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))数据结构的示例。 栈提供了将新对象放入栈(方法`push()`)并从栈中获取对象(方法`pop()`)。 栈根据后进先出(LIFO)返回对象。 请注意,JDK 提供了默认的 Java 栈实现作为类`java.util.Stack`。 适用于所有栈实现的两个强制操作是: * **`push()`**:将数据项放置在栈指针指向的位置。 * **`pop()`**:在其中删除数据项并从栈指针指向的位置返回该数据项。 某些严重依赖栈的环境可能会根据要求提供其他操作。 Stack 最常见的用法是表达式求值和语法解析。 您也可以在文本处理器的撤消/重做操作中找到它们。 ## Java 栈实现源代码 下面的程序是栈数据结构的示例实现。 可以根据需要随意修改源代码。 ```java package com.howtodoinjava.datastructure; import java.util.Arrays; public class CustomStack <E> { private int size = 0; private static final int DEFAULT_CAPACITY = 10; private Object elements[]; public CustomStack() { elements = new Object[DEFAULT_CAPACITY]; } public void push(E e) { if (size == elements.length) { ensureCapacity(); } elements[size++] = e; } @SuppressWarnings("unchecked") public E pop() { E e = (E) elements[--size]; elements[size] = null; return e; } private void ensureCapacity() { int newSize = elements.length * 2; elements = Arrays.copyOf(elements, newSize); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append('['); for(int i = 0; i < size ;i++) { sb.append(elements[i].toString()); if(i < size-1){ sb.append(","); } } sb.append(']'); return sb.toString(); } } ``` 现在,通过从栈中推送和弹出一些项目来测试我们的栈实现。 ```java public class Main { public static void main(String[] args) { CustomStack<Integer> stack = new CustomStack<>(); stack.push(10); stack.push(20); stack.push(30); stack.push(40); System.out.println(stack); System.out.println( stack.pop() ); System.out.println( stack.pop() ); System.out.println( stack.pop() ); System.out.println( stack ); } } ``` ```java Output: [10,20,30,40] 40 30 20 [10] ``` 这就是有关 **Java 栈实现**示例的简单但重要的概念。 学习愉快!