# 使用数组的 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 Stack 实现源代码

下面的程序是 Stack 数据结构的示例实现。 可以根据需要随意修改源代码。

```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 堆栈实现**示例的简单但重要的概念。

学习愉快！